Lines Matching refs:wi
121 static int get_ia_size(struct s2_walk_info *wi) in get_ia_size() argument
123 return 64 - wi->t0sz; in get_ia_size()
126 static int check_base_s2_limits(struct s2_walk_info *wi, in check_base_s2_limits() argument
131 ia_size = get_ia_size(wi); in check_base_s2_limits()
134 switch (BIT(wi->pgshift)) { in check_base_s2_limits()
154 start_size = input_size - ((3 - level) * stride + wi->pgshift); in check_base_s2_limits()
162 static int check_output_size(struct s2_walk_info *wi, phys_addr_t output) in check_output_size() argument
164 unsigned int output_size = wi->max_oa_bits; in check_output_size()
180 struct s2_walk_info *wi, struct kvm_s2_trans *out) in walk_nested_s2_pgd() argument
189 switch (BIT(wi->pgshift)) { in walk_nested_s2_pgd()
193 level = 3 - wi->sl; in walk_nested_s2_pgd()
197 level = 2 - wi->sl; in walk_nested_s2_pgd()
202 stride = wi->pgshift - 3; in walk_nested_s2_pgd()
203 input_size = get_ia_size(wi); in walk_nested_s2_pgd()
207 ret = check_base_s2_limits(wi, level, input_size, stride); in walk_nested_s2_pgd()
212 wi->pgshift); in walk_nested_s2_pgd()
213 base_addr = wi->baddr & GENMASK_ULL(47, base_lower_bound); in walk_nested_s2_pgd()
215 if (check_output_size(wi, base_addr)) { in walk_nested_s2_pgd()
225 addr_bottom = (3 - level) * stride + wi->pgshift; in walk_nested_s2_pgd()
230 ret = wi->read_desc(paddr, &desc, wi->data); in walk_nested_s2_pgd()
238 if (wi->be) in walk_nested_s2_pgd()
254 if (check_output_size(wi, desc)) { in walk_nested_s2_pgd()
260 base_addr = desc & GENMASK_ULL(47, wi->pgshift); in walk_nested_s2_pgd()
272 if (check_output_size(wi, desc)) { in walk_nested_s2_pgd()
284 addr_bottom += contiguous_bit_shift(desc, wi, level); in walk_nested_s2_pgd()
290 out->block_size = 1UL << ((3 - level) * stride + wi->pgshift); in walk_nested_s2_pgd()
305 static void vtcr_to_walk_info(u64 vtcr, struct s2_walk_info *wi) in vtcr_to_walk_info() argument
307 wi->t0sz = vtcr & TCR_EL2_T0SZ_MASK; in vtcr_to_walk_info()
311 wi->pgshift = 12; break; in vtcr_to_walk_info()
313 wi->pgshift = 14; break; in vtcr_to_walk_info()
316 wi->pgshift = 16; break; in vtcr_to_walk_info()
319 wi->sl = FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); in vtcr_to_walk_info()
321 wi->max_oa_bits = min(get_kvm_ipa_limit(), in vtcr_to_walk_info()
329 struct s2_walk_info wi; in kvm_walk_nested_s2() local
337 wi.read_desc = read_guest_s2_desc; in kvm_walk_nested_s2()
338 wi.data = vcpu; in kvm_walk_nested_s2()
339 wi.baddr = vcpu_read_sys_reg(vcpu, VTTBR_EL2); in kvm_walk_nested_s2()
341 vtcr_to_walk_info(vtcr, &wi); in kvm_walk_nested_s2()
343 wi.be = vcpu_read_sys_reg(vcpu, SCTLR_EL2) & SCTLR_ELx_EE; in kvm_walk_nested_s2()
345 ret = walk_nested_s2_pgd(gipa, &wi, result); in kvm_walk_nested_s2()