diff --git a/linux-ramdump-parser-v2/iommulib.py b/linux-ramdump-parser-v2/iommulib.py
index 2a772a0c4e351ef9d3c992111d21ebbaf10d4cce..1ca1d6e89a4b3655175113f03a02b69ccfaa0ca1 100644
--- a/linux-ramdump-parser-v2/iommulib.py
+++ b/linux-ramdump-parser-v2/iommulib.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+# Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 and
@@ -97,6 +97,8 @@ class IommuLib(object):
 
         iommu_domain_ops = self.ramdump.read_structure_field(
             domain_ptr, 'struct iommu_domain', 'ops')
+        if iommu_domain_ops is None or iommu_domain_ops == 0:
+            return
 
         if iommu_domain_ops == arm_smmu_ops:
             if priv_ptr is not None:
@@ -107,15 +109,24 @@ class IommuLib(object):
 
             pgtbl_ops_ptr = self.ramdump.read_structure_field(
                 arm_smmu_domain_ptr, 'struct arm_smmu_domain', 'pgtbl_ops')
+            if pgtbl_ops_ptr is None or pgtbl_ops_ptr == 0:
+                return
 
             pg_table = 0
             level = 0
-            if pgtbl_ops_ptr != 0:
-                io_pgtable_ptr = self.ramdump.container_of(
-                    pgtbl_ops_ptr, 'struct io_pgtable', 'ops')
+            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(
-                    io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'iop')
+                    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',
diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py
index 107243538774285f778d7b4a2b6b202adc655082..62029bf71a07a15c56ba6e018d2f831f87fbd5ca 100644
--- a/linux-ramdump-parser-v2/ramdump.py
+++ b/linux-ramdump-parser-v2/ramdump.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+# Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 and
@@ -72,6 +72,8 @@ class AutoDumpInfo(object):
     def parse(self):
         for (filename, base_addr) in self._parse():
             fullpath = os.path.join(self.autodumpdir, filename)
+            if not os.path.exists(fullpath):
+                continue
             end = base_addr + os.path.getsize(fullpath) - 1
             self.ebi_files.append((open(fullpath, 'rb'), base_addr, end, fullpath))
             # sort by addr, DDR files first. The goal is for