BACKPORT: FROMLIST: iommu/io-pgtable-arm-v7s: Extend PA34 for MediaTek
MediaTek extend the bit5 in lvl1 and lvl2 descriptor as PA34. Bug: 167939345 Link: https://lore.kernel.org/patchwork/patch/1301120/ Change-Id: I6bd677285b73271f977f8bdeb4ef6b658b2ea81d Signed-off-by: Yong Wu <yong.wu@mediatek.com> Signed-off-by: Chao Hao <chao.hao@mediatek.com> Signed-off-by: Chun-Hung Wu <chun-hung.wu@mediatek.com>
This commit is contained in:
@@ -112,9 +112,10 @@
|
||||
#define ARM_V7S_TEX_MASK 0x7
|
||||
#define ARM_V7S_ATTR_TEX(val) (((val) & ARM_V7S_TEX_MASK) << ARM_V7S_TEX_SHIFT)
|
||||
|
||||
/* MediaTek extend the two bits for PA 32bit/33bit */
|
||||
/* MediaTek extend the bits below for PA 32bit/33bit/34bit */
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT32 BIT(9)
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT33 BIT(4)
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT34 BIT(5)
|
||||
|
||||
/* *well, except for TEX on level 2 large pages, of course :( */
|
||||
#define ARM_V7S_CONT_PAGE_TEX_SHIFT 6
|
||||
@@ -196,6 +197,8 @@ static arm_v7s_iopte paddr_to_iopte(phys_addr_t paddr, int lvl,
|
||||
pte |= ARM_V7S_ATTR_MTK_PA_BIT32;
|
||||
if (paddr & BIT_ULL(33))
|
||||
pte |= ARM_V7S_ATTR_MTK_PA_BIT33;
|
||||
if (paddr & BIT_ULL(34))
|
||||
pte |= ARM_V7S_ATTR_MTK_PA_BIT34;
|
||||
return pte;
|
||||
}
|
||||
|
||||
@@ -220,6 +223,8 @@ static phys_addr_t iopte_to_paddr(arm_v7s_iopte pte, int lvl,
|
||||
paddr |= BIT_ULL(32);
|
||||
if (pte & ARM_V7S_ATTR_MTK_PA_BIT33)
|
||||
paddr |= BIT_ULL(33);
|
||||
if (pte & ARM_V7S_ATTR_MTK_PA_BIT34)
|
||||
paddr |= BIT_ULL(34);
|
||||
return paddr;
|
||||
}
|
||||
|
||||
@@ -756,7 +761,7 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
|
||||
if (cfg->ias > ARM_V7S_ADDR_BITS)
|
||||
return NULL;
|
||||
|
||||
if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
|
||||
if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 35 : ARM_V7S_ADDR_BITS))
|
||||
return NULL;
|
||||
|
||||
if (cfg->quirks & ~(IO_PGTABLE_QUIRK_ARM_NS |
|
||||
|
||||
@@ -92,8 +92,8 @@ struct io_pgtable_cfg {
|
||||
* TLB maintenance when mapping as well as when unmapping.
|
||||
*
|
||||
* IO_PGTABLE_QUIRK_ARM_MTK_EXT: (ARM v7s format) MediaTek IOMMUs extend
|
||||
* to support up to 34 bits PA where the bit32 and bit33 are
|
||||
* encoded in the bit9 and bit4 of the PTE respectively.
|
||||
* to support up to 35 bits PA where the bit32, bit33 and bit34 are
|
||||
* encoded in the bit9, bit4 and bit5 of the PTE respectively.
|
||||
*
|
||||
* IO_PGTABLE_QUIRK_NON_STRICT: Skip issuing synchronous leaf TLBIs
|
||||
* on unmap, for DMA domains using the flush queue mechanism for
|
||||
|
||||
Reference in New Issue
Block a user