On Tue, Mar 02, 2021 at 12:28:34PM +1100, David Gibson wrote: > On Wed, Feb 24, 2021 at 01:55:08PM +0530, Bharata B Rao wrote: > > Add a field to mmu_psize_def to store the page size encodings > > of H_RPT_INVALIDATE hcall. Initialize this while scanning the radix > > AP encodings. This will be used when invalidating with required > > page size encoding in the hcall. > > > > Signed-off-by: Bharata B Rao <bharata@xxxxxxxxxxxxx> > > --- > > arch/powerpc/include/asm/book3s/64/mmu.h | 1 + > > arch/powerpc/mm/book3s64/radix_pgtable.c | 5 +++++ > > 2 files changed, 6 insertions(+) > > > > diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h b/arch/powerpc/include/asm/book3s/64/mmu.h > > index eace8c3f7b0a..c02f42d1031e 100644 > > --- a/arch/powerpc/include/asm/book3s/64/mmu.h > > +++ b/arch/powerpc/include/asm/book3s/64/mmu.h > > @@ -19,6 +19,7 @@ struct mmu_psize_def { > > int penc[MMU_PAGE_COUNT]; /* HPTE encoding */ > > unsigned int tlbiel; /* tlbiel supported for that page size */ > > unsigned long avpnm; /* bits to mask out in AVPN in the HPTE */ > > + unsigned long h_rpt_pgsize; /* H_RPT_INVALIDATE page size encoding */ > > union { > > unsigned long sllp; /* SLB L||LP (exact mask to use in slbmte) */ > > unsigned long ap; /* Ap encoding used by PowerISA 3.0 */ > > diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c > > index 98f0b243c1ab..1b749899016b 100644 > > --- a/arch/powerpc/mm/book3s64/radix_pgtable.c > > +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c > > @@ -486,6 +486,7 @@ static int __init radix_dt_scan_page_sizes(unsigned long node, > > def = &mmu_psize_defs[idx]; > > def->shift = shift; > > def->ap = ap; > > + def->h_rpt_pgsize = psize_to_rpti_pgsize(idx); > > } > > > > /* needed ? */ > > @@ -560,9 +561,13 @@ void __init radix__early_init_devtree(void) > > */ > > mmu_psize_defs[MMU_PAGE_4K].shift = 12; > > mmu_psize_defs[MMU_PAGE_4K].ap = 0x0; > > + mmu_psize_defs[MMU_PAGE_4K].h_rpt_pgsize = > > + psize_to_rpti_pgsize(MMU_PAGE_4K); > > Hm. TBH, I was thinking of this as replacing psize_to_rpti_pgsize() - > that is, you directly put the correct codes in there, then just have > psize_to_rpti_pgsize() look them up in the table. > > I guess that could be a followup change, though. > > > > > mmu_psize_defs[MMU_PAGE_64K].shift = 16; > > mmu_psize_defs[MMU_PAGE_64K].ap = 0x5; > > + mmu_psize_defs[MMU_PAGE_64K].h_rpt_pgsize = > > + psize_to_rpti_pgsize(MMU_PAGE_64K); Hmm if you see I got rid of rpti_pgsize_to_psize() by having the defines directly in mmu_psize_def[]. There are two cases in the above code (radix__early_init_devtree) 1. If radix pagesize encodings are present in the DT, we walk the page sizes in the loop and populate the enconding for H_RPT_INVALIDATE. I am not sure if we can use the direct codes in this case. 2. If DT doesn't have the radix pagesize encodings, 4K and 64K sizes are assumed as fallback sizes where we can use direct encodings. Regards, Bharata.