Lines Matching refs:ppd
102 static void __init sme_clear_pgd(struct sme_populate_pgd_data *ppd)
107 pgd_start = ppd->vaddr & PGDIR_MASK;
108 pgd_end = ppd->vaddr_end & PGDIR_MASK;
112 pgd_p = ppd->pgd + pgd_index(ppd->vaddr);
117 static pud_t __init *sme_prepare_pgd(struct sme_populate_pgd_data *ppd)
124 pgd = ppd->pgd + pgd_index(ppd->vaddr);
126 p4d = ppd->pgtable_area;
128 ppd->pgtable_area += sizeof(*p4d) * PTRS_PER_P4D;
132 p4d = p4d_offset(pgd, ppd->vaddr);
134 pud = ppd->pgtable_area;
136 ppd->pgtable_area += sizeof(*pud) * PTRS_PER_PUD;
140 pud = pud_offset(p4d, ppd->vaddr);
142 pmd = ppd->pgtable_area;
144 ppd->pgtable_area += sizeof(*pmd) * PTRS_PER_PMD;
154 static void __init sme_populate_pgd_large(struct sme_populate_pgd_data *ppd)
159 pud = sme_prepare_pgd(ppd);
163 pmd = pmd_offset(pud, ppd->vaddr);
167 set_pmd(pmd, __pmd(ppd->paddr | ppd->pmd_flags));
170 static void __init sme_populate_pgd(struct sme_populate_pgd_data *ppd)
176 pud = sme_prepare_pgd(ppd);
180 pmd = pmd_offset(pud, ppd->vaddr);
182 pte = ppd->pgtable_area;
184 ppd->pgtable_area += sizeof(*pte) * PTRS_PER_PTE;
191 pte = pte_offset_kernel(pmd, ppd->vaddr);
193 set_pte(pte, __pte(ppd->paddr | ppd->pte_flags));
196 static void __init __sme_map_range_pmd(struct sme_populate_pgd_data *ppd)
198 while (ppd->vaddr < ppd->vaddr_end) {
199 sme_populate_pgd_large(ppd);
201 ppd->vaddr += PMD_SIZE;
202 ppd->paddr += PMD_SIZE;
206 static void __init __sme_map_range_pte(struct sme_populate_pgd_data *ppd)
208 while (ppd->vaddr < ppd->vaddr_end) {
209 sme_populate_pgd(ppd);
211 ppd->vaddr += PAGE_SIZE;
212 ppd->paddr += PAGE_SIZE;
216 static void __init __sme_map_range(struct sme_populate_pgd_data *ppd,
221 ppd->pmd_flags = pmd_flags;
222 ppd->pte_flags = pte_flags;
225 vaddr_end = ppd->vaddr_end;
228 ppd->vaddr_end = ALIGN(ppd->vaddr, PMD_SIZE);
229 __sme_map_range_pte(ppd);
232 ppd->vaddr_end = vaddr_end & PMD_MASK;
233 __sme_map_range_pmd(ppd);
236 ppd->vaddr_end = vaddr_end;
237 __sme_map_range_pte(ppd);
240 static void __init sme_map_range_encrypted(struct sme_populate_pgd_data *ppd)
242 __sme_map_range(ppd, PMD_FLAGS_ENC, PTE_FLAGS_ENC);
245 static void __init sme_map_range_decrypted(struct sme_populate_pgd_data *ppd)
247 __sme_map_range(ppd, PMD_FLAGS_DEC, PTE_FLAGS_DEC);
250 static void __init sme_map_range_decrypted_wp(struct sme_populate_pgd_data *ppd)
252 __sme_map_range(ppd, PMD_FLAGS_DEC_WP, PTE_FLAGS_DEC_WP);
298 struct sme_populate_pgd_data ppd;
395 ppd.pgtable_area = (void *)execute_end;
401 ppd.pgd = (pgd_t *)native_read_cr3_pa();
402 ppd.paddr = workarea_start;
403 ppd.vaddr = workarea_start;
404 ppd.vaddr_end = workarea_end;
405 sme_map_range_decrypted(&ppd);
416 ppd.pgd = ppd.pgtable_area;
417 memset(ppd.pgd, 0, sizeof(pgd_t) * PTRS_PER_PGD);
418 ppd.pgtable_area += sizeof(pgd_t) * PTRS_PER_PGD;
436 ppd.paddr = kernel_start;
437 ppd.vaddr = kernel_start;
438 ppd.vaddr_end = kernel_end;
439 sme_map_range_encrypted(&ppd);
442 ppd.paddr = kernel_start;
443 ppd.vaddr = kernel_start + decrypted_base;
444 ppd.vaddr_end = kernel_end + decrypted_base;
445 sme_map_range_decrypted_wp(&ppd);
449 ppd.paddr = initrd_start;
450 ppd.vaddr = initrd_start;
451 ppd.vaddr_end = initrd_end;
452 sme_map_range_encrypted(&ppd);
456 ppd.paddr = initrd_start;
457 ppd.vaddr = initrd_start + decrypted_base;
458 ppd.vaddr_end = initrd_end + decrypted_base;
459 sme_map_range_decrypted_wp(&ppd);
463 ppd.paddr = workarea_start;
464 ppd.vaddr = workarea_start;
465 ppd.vaddr_end = workarea_end;
466 sme_map_range_decrypted(&ppd);
468 ppd.paddr = workarea_start;
469 ppd.vaddr = workarea_start + decrypted_base;
470 ppd.vaddr_end = workarea_end + decrypted_base;
471 sme_map_range_decrypted(&ppd);
475 kernel_len, workarea_start, (unsigned long)ppd.pgd);
480 (unsigned long)ppd.pgd);
487 ppd.vaddr = kernel_start + decrypted_base;
488 ppd.vaddr_end = kernel_end + decrypted_base;
489 sme_clear_pgd(&ppd);
492 ppd.vaddr = initrd_start + decrypted_base;
493 ppd.vaddr_end = initrd_end + decrypted_base;
494 sme_clear_pgd(&ppd);
497 ppd.vaddr = workarea_start + decrypted_base;
498 ppd.vaddr_end = workarea_end + decrypted_base;
499 sme_clear_pgd(&ppd);