Message ID | 20220916094152.87137-4-j@jannau.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iommu: M1 Pro/Max DART support | expand |
On Fri, Sep 16, 2022 at 4:43 AM Janne Grunau <j@jannau.net> wrote: > > From: Sven Peter <sven@svenpeter.dev> > > 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> > > --- > > (no changes since v3) > > Changes in v3: > - apply change to io-pgtable-dart.c > > drivers/iommu/io-pgtable-dart.c | 8 ++++++++ > 1 file changed, 8 insertions(+) Reviewed-by: Rob Herring <robh@kernel.org>
diff --git a/drivers/iommu/io-pgtable-dart.c b/drivers/iommu/io-pgtable-dart.c index 312d40528748..665a52e5c9b0 100644 --- a/drivers/iommu/io-pgtable-dart.c +++ b/drivers/iommu/io-pgtable-dart.c @@ -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 */ @@ -108,6 +112,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;