Commit da52ab48 authored by James Morse's avatar James Morse Committed by Wupeng Ma
Browse files

arm64: mm: Add pgprot_pbha() to allow drivers to request PBHA values

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I7ZC0H

Reference: https://lore.kernel.org/all/20211015161416.2196-1-james.morse@arm.com/t/#u



--------------------------------

Add a pgprot_pbha() helper that modifies a pgprot_t to include a pbha
value. The value is checked against those that were listed as only
affecting performance.

Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarMa Wupeng <mawupeng1@huawei.com>
parent fa2ce169
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@
#define PTE_CONT		(_AT(pteval_t, 1) << 52)	/* Contiguous range */
#define PTE_PXN			(_AT(pteval_t, 1) << 53)	/* Privileged XN */
#define PTE_UXN			(_AT(pteval_t, 1) << 54)	/* User XN */
#define PTE_PBHA_MASK		(_AT(pteval_t, 0xf) << 59)	/* Page Base Hardware Attributes */

#define PTE_ADDR_LOW		(((_AT(pteval_t, 1) << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT)
#ifdef CONFIG_ARM64_PA_BITS_52
+12 −0
Original line number Diff line number Diff line
@@ -515,6 +515,18 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd)
	__pgprot_modify(prot, PTE_ATTRINDX_MASK, \
			PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN)


extern unsigned long arm64_pbha_perf_only_values;
static inline unsigned long __pbha_check_perf_only(unsigned long pbha_val)
{
	if (test_bit(pbha_val, &arm64_pbha_perf_only_values))
		return FIELD_PREP(PTE_PBHA_MASK, pbha_val);
	return 0;
}

#define pgprot_pbha(prot, pbha_val) \
	__pgprot_modify(prot, PTE_PBHA_MASK, __pbha_check_perf_only(pbha_val))

#define __HAVE_PHYS_MEM_ACCESS_PROT
struct file;
extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+1 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ EXPORT_SYMBOL(arm64_use_ng_mappings);
DEFINE_PER_CPU_READ_MOSTLY(const char *, this_cpu_vector) = vectors;

unsigned long __ro_after_init arm64_pbha_perf_only_values;
EXPORT_SYMBOL(arm64_pbha_perf_only_values);

/*
 * Flag to indicate if we have computed the system wide