ipa->mem_count = mem_data->local_count;
        ipa->mem = mem_data->local;
 
+       /* Check the route and filter table memory regions */
+       if (!ipa_table_mem_valid(ipa, 0))
+               return -EINVAL;
+       if (!ipa_table_mem_valid(ipa, IPA_ROUTE_MODEM_COUNT))
+               return -EINVAL;
+
        ret = dma_set_mask_and_coherent(&ipa->pdev->dev, DMA_BIT_MASK(64));
        if (ret) {
                dev_err(dev, "error %d setting DMA mask\n", ret);
 
 }
 
 /* Zero modem_route_count means filter table memory check */
-static bool ipa_table_mem_valid(struct ipa *ipa, bool modem_route_count)
+bool ipa_table_mem_valid(struct ipa *ipa, bool modem_route_count)
 {
        bool hash_support = ipa_table_hash_support(ipa);
        bool filter = !modem_route_count;
 
        ipa_table_validate_build();
 
-       if (!ipa_table_mem_valid(ipa, 0))
-               return -EINVAL;
-       if (!ipa_table_mem_valid(ipa, IPA_ROUTE_MODEM_COUNT))
-               return -EINVAL;
-
        /* The IPA hardware requires route and filter table rules to be
         * aligned on a 128-byte boundary.  We put the "zero rule" at the
         * base of the table area allocated here.  The DMA address returned
 
  */
 void ipa_table_exit(struct ipa *ipa);
 
+/**
+ * ipa_table_mem_valid() - Validate sizes of table memory regions
+ * @ipa:       IPA pointer
+ * @modem_route_count: Number of modem route table entries
+ */
+bool ipa_table_mem_valid(struct ipa *ipa, bool modem_route_count);
+
 #endif /* _IPA_TABLE_H_ */