提交 d8fe365a 编写于 作者: S Sven Peter 提交者: Joerg Roedel

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: NSven Peter <sven@svenpeter.dev>
Signed-off-by: NJanne Grunau <j@jannau.net>
Reviewed-by: NRob Herring <robh@kernel.org>
Acked-by: NHector Martin <marcan@marcan.st>
Link: https://lore.kernel.org/r/20220916094152.87137-4-j@jannau.netSigned-off-by: NJoerg Roedel <jroedel@suse.de>
上级 745ef109
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册