|
@@ -570,8 +570,8 @@ static void __init map_kernel(pgd_t *pgd)
|
|
|
* entry instead.
|
|
|
*/
|
|
|
BUG_ON(!IS_ENABLED(CONFIG_ARM64_16K_PAGES));
|
|
|
- set_pud(pud_set_fixmap_offset(pgd, FIXADDR_START),
|
|
|
- __pud(__pa_symbol(bm_pmd) | PUD_TYPE_TABLE));
|
|
|
+ pud_populate(&init_mm, pud_set_fixmap_offset(pgd, FIXADDR_START),
|
|
|
+ lm_alias(bm_pmd));
|
|
|
pud_clear_fixmap();
|
|
|
} else {
|
|
|
BUG();
|
|
@@ -686,7 +686,7 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node)
|
|
|
if (!p)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- set_pmd(pmd, __pmd(__pa(p) | PROT_SECT_NORMAL));
|
|
|
+ pmd_set_huge(pmd, __pa(p), __pgprot(PROT_SECT_NORMAL));
|
|
|
} else
|
|
|
vmemmap_verify((pte_t *)pmd, node, addr, next);
|
|
|
} while (addr = next, addr != end);
|
|
@@ -879,15 +879,19 @@ int __init arch_ioremap_pmd_supported(void)
|
|
|
|
|
|
int pud_set_huge(pud_t *pud, phys_addr_t phys, pgprot_t prot)
|
|
|
{
|
|
|
+ pgprot_t sect_prot = __pgprot(PUD_TYPE_SECT |
|
|
|
+ pgprot_val(mk_sect_prot(prot)));
|
|
|
BUG_ON(phys & ~PUD_MASK);
|
|
|
- set_pud(pud, __pud(phys | PUD_TYPE_SECT | pgprot_val(mk_sect_prot(prot))));
|
|
|
+ set_pud(pud, pfn_pud(__phys_to_pfn(phys), sect_prot));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
int pmd_set_huge(pmd_t *pmd, phys_addr_t phys, pgprot_t prot)
|
|
|
{
|
|
|
+ pgprot_t sect_prot = __pgprot(PMD_TYPE_SECT |
|
|
|
+ pgprot_val(mk_sect_prot(prot)));
|
|
|
BUG_ON(phys & ~PMD_MASK);
|
|
|
- set_pmd(pmd, __pmd(phys | PMD_TYPE_SECT | pgprot_val(mk_sect_prot(prot))));
|
|
|
+ set_pmd(pmd, pfn_pmd(__phys_to_pfn(phys), sect_prot));
|
|
|
return 1;
|
|
|
}
|
|
|
|