Lines Matching refs:ppd

100 static void __init sme_clear_pgd(struct sme_populate_pgd_data *ppd)  in sme_clear_pgd()  argument
105 pgd_start = ppd->vaddr & PGDIR_MASK; in sme_clear_pgd()
106 pgd_end = ppd->vaddr_end & PGDIR_MASK; in sme_clear_pgd()
110 pgd_p = ppd->pgd + pgd_index(ppd->vaddr); in sme_clear_pgd()
115 static pud_t __init *sme_prepare_pgd(struct sme_populate_pgd_data *ppd) in sme_prepare_pgd() argument
122 pgd = ppd->pgd + pgd_index(ppd->vaddr); in sme_prepare_pgd()
124 p4d = ppd->pgtable_area; in sme_prepare_pgd()
126 ppd->pgtable_area += sizeof(*p4d) * PTRS_PER_P4D; in sme_prepare_pgd()
130 p4d = p4d_offset(pgd, ppd->vaddr); in sme_prepare_pgd()
132 pud = ppd->pgtable_area; in sme_prepare_pgd()
134 ppd->pgtable_area += sizeof(*pud) * PTRS_PER_PUD; in sme_prepare_pgd()
138 pud = pud_offset(p4d, ppd->vaddr); in sme_prepare_pgd()
140 pmd = ppd->pgtable_area; in sme_prepare_pgd()
142 ppd->pgtable_area += sizeof(*pmd) * PTRS_PER_PMD; in sme_prepare_pgd()
152 static void __init sme_populate_pgd_large(struct sme_populate_pgd_data *ppd) in sme_populate_pgd_large() argument
157 pud = sme_prepare_pgd(ppd); in sme_populate_pgd_large()
161 pmd = pmd_offset(pud, ppd->vaddr); in sme_populate_pgd_large()
165 set_pmd(pmd, __pmd(ppd->paddr | ppd->pmd_flags)); in sme_populate_pgd_large()
168 static void __init sme_populate_pgd(struct sme_populate_pgd_data *ppd) in sme_populate_pgd() argument
174 pud = sme_prepare_pgd(ppd); in sme_populate_pgd()
178 pmd = pmd_offset(pud, ppd->vaddr); in sme_populate_pgd()
180 pte = ppd->pgtable_area; in sme_populate_pgd()
182 ppd->pgtable_area += sizeof(*pte) * PTRS_PER_PTE; in sme_populate_pgd()
189 pte = pte_offset_map(pmd, ppd->vaddr); in sme_populate_pgd()
191 set_pte(pte, __pte(ppd->paddr | ppd->pte_flags)); in sme_populate_pgd()
194 static void __init __sme_map_range_pmd(struct sme_populate_pgd_data *ppd) in __sme_map_range_pmd() argument
196 while (ppd->vaddr < ppd->vaddr_end) { in __sme_map_range_pmd()
197 sme_populate_pgd_large(ppd); in __sme_map_range_pmd()
199 ppd->vaddr += PMD_PAGE_SIZE; in __sme_map_range_pmd()
200 ppd->paddr += PMD_PAGE_SIZE; in __sme_map_range_pmd()
204 static void __init __sme_map_range_pte(struct sme_populate_pgd_data *ppd) in __sme_map_range_pte() argument
206 while (ppd->vaddr < ppd->vaddr_end) { in __sme_map_range_pte()
207 sme_populate_pgd(ppd); in __sme_map_range_pte()
209 ppd->vaddr += PAGE_SIZE; in __sme_map_range_pte()
210 ppd->paddr += PAGE_SIZE; in __sme_map_range_pte()
214 static void __init __sme_map_range(struct sme_populate_pgd_data *ppd, in __sme_map_range() argument
219 ppd->pmd_flags = pmd_flags; in __sme_map_range()
220 ppd->pte_flags = pte_flags; in __sme_map_range()
223 vaddr_end = ppd->vaddr_end; in __sme_map_range()
226 ppd->vaddr_end = ALIGN(ppd->vaddr, PMD_PAGE_SIZE); in __sme_map_range()
227 __sme_map_range_pte(ppd); in __sme_map_range()
230 ppd->vaddr_end = vaddr_end & PMD_PAGE_MASK; in __sme_map_range()
231 __sme_map_range_pmd(ppd); in __sme_map_range()
234 ppd->vaddr_end = vaddr_end; in __sme_map_range()
235 __sme_map_range_pte(ppd); in __sme_map_range()
238 static void __init sme_map_range_encrypted(struct sme_populate_pgd_data *ppd) in sme_map_range_encrypted() argument
240 __sme_map_range(ppd, PMD_FLAGS_ENC, PTE_FLAGS_ENC); in sme_map_range_encrypted()
243 static void __init sme_map_range_decrypted(struct sme_populate_pgd_data *ppd) in sme_map_range_decrypted() argument
245 __sme_map_range(ppd, PMD_FLAGS_DEC, PTE_FLAGS_DEC); in sme_map_range_decrypted()
248 static void __init sme_map_range_decrypted_wp(struct sme_populate_pgd_data *ppd) in sme_map_range_decrypted_wp() argument
250 __sme_map_range(ppd, PMD_FLAGS_DEC_WP, PTE_FLAGS_DEC_WP); in sme_map_range_decrypted_wp()
296 struct sme_populate_pgd_data ppd; in sme_encrypt_kernel() local
393 ppd.pgtable_area = (void *)execute_end; in sme_encrypt_kernel()
399 ppd.pgd = (pgd_t *)native_read_cr3_pa(); in sme_encrypt_kernel()
400 ppd.paddr = workarea_start; in sme_encrypt_kernel()
401 ppd.vaddr = workarea_start; in sme_encrypt_kernel()
402 ppd.vaddr_end = workarea_end; in sme_encrypt_kernel()
403 sme_map_range_decrypted(&ppd); in sme_encrypt_kernel()
414 ppd.pgd = ppd.pgtable_area; in sme_encrypt_kernel()
415 memset(ppd.pgd, 0, sizeof(pgd_t) * PTRS_PER_PGD); in sme_encrypt_kernel()
416 ppd.pgtable_area += sizeof(pgd_t) * PTRS_PER_PGD; in sme_encrypt_kernel()
434 ppd.paddr = kernel_start; in sme_encrypt_kernel()
435 ppd.vaddr = kernel_start; in sme_encrypt_kernel()
436 ppd.vaddr_end = kernel_end; in sme_encrypt_kernel()
437 sme_map_range_encrypted(&ppd); in sme_encrypt_kernel()
440 ppd.paddr = kernel_start; in sme_encrypt_kernel()
441 ppd.vaddr = kernel_start + decrypted_base; in sme_encrypt_kernel()
442 ppd.vaddr_end = kernel_end + decrypted_base; in sme_encrypt_kernel()
443 sme_map_range_decrypted_wp(&ppd); in sme_encrypt_kernel()
447 ppd.paddr = initrd_start; in sme_encrypt_kernel()
448 ppd.vaddr = initrd_start; in sme_encrypt_kernel()
449 ppd.vaddr_end = initrd_end; in sme_encrypt_kernel()
450 sme_map_range_encrypted(&ppd); in sme_encrypt_kernel()
454 ppd.paddr = initrd_start; in sme_encrypt_kernel()
455 ppd.vaddr = initrd_start + decrypted_base; in sme_encrypt_kernel()
456 ppd.vaddr_end = initrd_end + decrypted_base; in sme_encrypt_kernel()
457 sme_map_range_decrypted_wp(&ppd); in sme_encrypt_kernel()
461 ppd.paddr = workarea_start; in sme_encrypt_kernel()
462 ppd.vaddr = workarea_start; in sme_encrypt_kernel()
463 ppd.vaddr_end = workarea_end; in sme_encrypt_kernel()
464 sme_map_range_decrypted(&ppd); in sme_encrypt_kernel()
466 ppd.paddr = workarea_start; in sme_encrypt_kernel()
467 ppd.vaddr = workarea_start + decrypted_base; in sme_encrypt_kernel()
468 ppd.vaddr_end = workarea_end + decrypted_base; in sme_encrypt_kernel()
469 sme_map_range_decrypted(&ppd); in sme_encrypt_kernel()
473 kernel_len, workarea_start, (unsigned long)ppd.pgd); in sme_encrypt_kernel()
478 (unsigned long)ppd.pgd); in sme_encrypt_kernel()
485 ppd.vaddr = kernel_start + decrypted_base; in sme_encrypt_kernel()
486 ppd.vaddr_end = kernel_end + decrypted_base; in sme_encrypt_kernel()
487 sme_clear_pgd(&ppd); in sme_encrypt_kernel()
490 ppd.vaddr = initrd_start + decrypted_base; in sme_encrypt_kernel()
491 ppd.vaddr_end = initrd_end + decrypted_base; in sme_encrypt_kernel()
492 sme_clear_pgd(&ppd); in sme_encrypt_kernel()
495 ppd.vaddr = workarea_start + decrypted_base; in sme_encrypt_kernel()
496 ppd.vaddr_end = workarea_end + decrypted_base; in sme_encrypt_kernel()
497 sme_clear_pgd(&ppd); in sme_encrypt_kernel()