}
 }
 
-static void clear_dte_entry(struct amd_iommu *iommu, u16 devid)
+/*
+ * Clear DMA-remap related flags to block all DMA (blockeded domain)
+ */
+static void clear_dte_entry(struct amd_iommu *iommu, struct iommu_dev_data *dev_data)
 {
-       struct dev_table_entry *dev_table = get_dev_table(iommu);
-
-       /* remove entry from the device table seen by the hardware */
-       dev_table[devid].data[0]  = DTE_FLAG_V;
-
-       if (!amd_iommu_snp_en)
-               dev_table[devid].data[0] |= DTE_FLAG_TV;
-
-       dev_table[devid].data[1] &= DTE_FLAG_MASK;
+       struct dev_table_entry new = {};
+       struct dev_table_entry *dte = &get_dev_table(iommu)[dev_data->devid];
 
-       amd_iommu_apply_erratum_63(iommu, devid);
+       make_clear_dte(dev_data, dte, &new);
+       update_dte256(iommu, dev_data, &new);
 }
 
 /* Update and flush DTE for the given device */
        if (set)
                set_dte_entry(iommu, dev_data);
        else
-               clear_dte_entry(iommu, dev_data->devid);
+               clear_dte_entry(iommu, dev_data);
 
        clone_aliases(iommu, dev_data->dev);
        device_flush_dte(dev_data);