iommu/io-pgtable: Add DART subpage protection support
DART allows to only expose a subpage to the device. While this is an optional feature on the M1 DARTs the new ones present on the Pro/Max models require this field in every PTE. Signed-off-by: Sven Peter <sven@svenpeter.dev> Signed-off-by: Janne Grunau <j@jannau.net> Reviewed-by: Rob Herring <robh@kernel.org> Acked-by: Hector Martin <marcan@marcan.st> Link: https://lore.kernel.org/r/20220916094152.87137-4-j@jannau.net Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
745ef1092b
commit
d8fe365a4f
@ -14,6 +14,7 @@
|
||||
#define pr_fmt(fmt) "dart io-pgtable: " fmt
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/io-pgtable.h>
|
||||
#include <linux/kernel.h>
|
||||
@ -40,6 +41,9 @@
|
||||
#define DART_PTES_PER_TABLE(d) \
|
||||
(DART_GRANULE(d) >> ilog2(sizeof(dart_iopte)))
|
||||
|
||||
#define APPLE_DART_PTE_SUBPAGE_START GENMASK_ULL(63, 52)
|
||||
#define APPLE_DART_PTE_SUBPAGE_END GENMASK_ULL(51, 40)
|
||||
|
||||
#define APPLE_DART1_PADDR_MASK GENMASK_ULL(35, 12)
|
||||
|
||||
/* Apple DART1 protection bits */
|
||||
@ -107,6 +111,10 @@ static int dart_init_pte(struct dart_io_pgtable *data,
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
/* subpage protection: always allow access to the entire page */
|
||||
pte |= FIELD_PREP(APPLE_DART_PTE_SUBPAGE_START, 0);
|
||||
pte |= FIELD_PREP(APPLE_DART_PTE_SUBPAGE_END, 0xfff);
|
||||
|
||||
pte |= APPLE_DART1_PTE_PROT_SP_DIS;
|
||||
pte |= APPLE_DART_PTE_VALID;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user