Skip to content
Snippets Groups Projects
Commit 137cd66a authored by Patrick Daly's avatar Patrick Daly
Browse files

lrdp: iommu: fix page table parsing

New kernel versions have altered the definition of
'struct arm_lpae_io_pgtable'. Get the required values from
'struct io_pgtable_cfg' instead.

Change-Id: Idf91c0efdddb58cdb0130d8a97e4757d05925850
parent 6cef78cd
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@
import rb_tree
import linux_list as llist
from mm import phys_to_virt
ARM_SMMU_DOMAIN = 0
MSM_SMMU_DOMAIN = 1
......@@ -112,30 +113,25 @@ class IommuLib(object):
if pgtbl_ops_ptr is None or pgtbl_ops_ptr == 0:
return
pg_table = 0
level = 0
fn = self.ramdump.read_structure_field(pgtbl_ops_ptr,
'struct io_pgtable_ops', 'map')
if fn == self.ramdump.address_of('av8l_fast_map'):
av8l_fast_io_pgtable_ptr = self.ramdump.container_of(
pgtbl_ops_ptr, 'struct av8l_fast_io_pgtable', 'iop.ops')
pg_table = self.ramdump.read_structure_field(
av8l_fast_io_pgtable_ptr, 'struct av8l_fast_io_pgtable',
'pgd')
level = 3
else:
arm_lpae_io_pgtable_ptr = self.ramdump.container_of(
pgtbl_ops_ptr, 'struct arm_lpae_io_pgtable', 'iop.ops')
pg_table = self.ramdump.read_structure_field(
arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable',
'pgd')
level = self.ramdump.read_structure_field(
arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable',
'levels')
pg_table = self.ramdump.read_structure_field(
arm_smmu_domain_ptr, 'struct arm_smmu_domain',
'pgtbl_cfg.arm_lpae_s1_cfg.ttbr[0]')
pg_table = phys_to_virt(self.ramdump, pg_table)
domain_create = Domain(pg_table, 0, [], client_name,
ARM_SMMU_DOMAIN, level)
domain_list.append(domain_create)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment