diff options
Diffstat (limited to 'include/linux/io-pgtable.h')
| -rw-r--r-- | include/linux/io-pgtable.h | 27 | 
1 files changed, 23 insertions, 4 deletions
diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h index ee21eedafe98..53d53c6c2be9 100644 --- a/include/linux/io-pgtable.h +++ b/include/linux/io-pgtable.h @@ -83,12 +83,16 @@ struct io_pgtable_cfg {  	 * IO_PGTABLE_QUIRK_NON_STRICT: Skip issuing synchronous leaf TLBIs  	 *	on unmap, for DMA domains using the flush queue mechanism for  	 *	delayed invalidation. +	 * +	 * IO_PGTABLE_QUIRK_ARM_TTBR1: (ARM LPAE format) Configure the table +	 *	for use in the upper half of a split address space.  	 */  	#define IO_PGTABLE_QUIRK_ARM_NS		BIT(0)  	#define IO_PGTABLE_QUIRK_NO_PERMS	BIT(1)  	#define IO_PGTABLE_QUIRK_TLBI_ON_MAP	BIT(2)  	#define IO_PGTABLE_QUIRK_ARM_MTK_EXT	BIT(3)  	#define IO_PGTABLE_QUIRK_NON_STRICT	BIT(4) +	#define IO_PGTABLE_QUIRK_ARM_TTBR1	BIT(5)  	unsigned long			quirks;  	unsigned long			pgsize_bitmap;  	unsigned int			ias; @@ -100,18 +104,33 @@ struct io_pgtable_cfg {  	/* Low-level data specific to the table format */  	union {  		struct { -			u64	ttbr[2]; -			u64	tcr; +			u64	ttbr; +			struct { +				u32	ips:3; +				u32	tg:2; +				u32	sh:2; +				u32	orgn:2; +				u32	irgn:2; +				u32	tsz:6; +			}	tcr;  			u64	mair;  		} arm_lpae_s1_cfg;  		struct {  			u64	vttbr; -			u64	vtcr; +			struct { +				u32	ps:3; +				u32	tg:2; +				u32	sh:2; +				u32	orgn:2; +				u32	irgn:2; +				u32	sl:2; +				u32	tsz:6; +			}	vtcr;  		} arm_lpae_s2_cfg;  		struct { -			u32	ttbr[2]; +			u32	ttbr;  			u32	tcr;  			u32	nmrr;  			u32	prrr;  |