IOMMU Fixes for Linux v4.7-rc3
Three patches queued up: * Fix for ARM-SMMU to add a missing iommu-ops callback which is required by common iommu code * Fix for the rockchip iommu where the wrong MMUs got the commands * A regression fix for the Intel VT-d driver. The regression only showed up on X58 chipsets with more than one iommu. These chipsets seem to require that QI is enabled on all IOMMUs before it can be used. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJXZArGAAoJECvwRC2XARrj1zwP+wTP9+bvEFvztoIOsFY9uB+3 iiVC083t/4y4qmlwbUuHfI7Oh6RNQTbYhCWDvD5XzW7wDONYrkYwrwvDy3suV8jE vjnnufK4suEpE96dlI7O+ivudqVBLnvzVIqhJwTwsNUgIBO8ZKGgJDNSiRn00eSh 4+ooS3EHExW6xxeUYwS5t4WKHS463eABOs6EJiF7WnuX1hhNHdLS/kik7qtEZ2uU yTHHKTklDHR3uToj6bCnaQnTVQVlN7Yde1ba8WqbzzSnFz+ir1RMElXkp7aCASnY /V1bEPRnZtIaT8JRBAK2FDjnsrDFtTmuF+uU1FZxT1upoxOie3pT4d9hCJmpbhxu z4UAXJ/DSI2V8cqR6GW4tEfXOJ7ZX8QSqakuAdlIlo+3EJ9xWwvhNh+EHdSQn2W7 vp8abxN8DuAD2nUjGjNOur1s53w16SH0w06pF5a+LBOkbGuBHsPYcNS6weu4kWWb NdoT52omHiDe4zDAn5HZYvpfriRUD87SMPt5ipYv/5Lh9mYDO1qPjNAB6OX4Hir5 QhZwkVBzxbzdeoXpjSwa9xtLOW0VoCtknDEbfD7Eyd6/TAuzcHPaYK1PJlmpBNlq 0Eiz9LLeO2WRY0Z5WohWrpaRm/rjo0RbFKQPsgqw3RNTp4i93yvCcpb8bVMnjBIw VScIBfb0XDQ/niIeclrN =CrjN -----END PGP SIGNATURE----- Merge tag 'iommu-fixes-v4.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu Pull IOMMU fixes from Joerg Roedel: "Three patches queued up: - Fix for ARM-SMMU to add a missing iommu-ops callback which is required by common iommu code - Fix for the rockchip iommu where the wrong MMUs got the commands - A regression fix for the Intel VT-d driver. The regression only showed up on X58 chipsets with more than one iommu. These chipsets seem to require that QI is enabled on all IOMMUs before it can be used" * tag 'iommu-fixes-v4.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: iommu/vt-d: Enable QI on all IOMMUs before setting root entry iommu/rockchip: Fix zap cache during device attach iommu/arm-smmu: Wire up map_sg for arm-smmu-v3
This commit is contained in:
commit
8c25615574
3 changed files with 14 additions and 6 deletions
|
@ -1941,6 +1941,7 @@ static struct iommu_ops arm_smmu_ops = {
|
|||
.attach_dev = arm_smmu_attach_dev,
|
||||
.map = arm_smmu_map,
|
||||
.unmap = arm_smmu_unmap,
|
||||
.map_sg = default_iommu_map_sg,
|
||||
.iova_to_phys = arm_smmu_iova_to_phys,
|
||||
.add_device = arm_smmu_add_device,
|
||||
.remove_device = arm_smmu_remove_device,
|
||||
|
|
|
@ -3222,11 +3222,6 @@ static int __init init_dmars(void)
|
|||
}
|
||||
}
|
||||
|
||||
iommu_flush_write_buffer(iommu);
|
||||
iommu_set_root_entry(iommu);
|
||||
iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
|
||||
iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
|
||||
|
||||
if (!ecap_pass_through(iommu->ecap))
|
||||
hw_pass_through = 0;
|
||||
#ifdef CONFIG_INTEL_IOMMU_SVM
|
||||
|
@ -3235,6 +3230,18 @@ static int __init init_dmars(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Now that qi is enabled on all iommus, set the root entry and flush
|
||||
* caches. This is required on some Intel X58 chipsets, otherwise the
|
||||
* flush_context function will loop forever and the boot hangs.
|
||||
*/
|
||||
for_each_active_iommu(iommu, drhd) {
|
||||
iommu_flush_write_buffer(iommu);
|
||||
iommu_set_root_entry(iommu);
|
||||
iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
|
||||
iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
|
||||
}
|
||||
|
||||
if (iommu_pass_through)
|
||||
iommu_identity_mapping |= IDENTMAP_ALL;
|
||||
|
||||
|
|
|
@ -815,7 +815,7 @@ static int rk_iommu_attach_device(struct iommu_domain *domain,
|
|||
dte_addr = virt_to_phys(rk_domain->dt);
|
||||
for (i = 0; i < iommu->num_mmu; i++) {
|
||||
rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, dte_addr);
|
||||
rk_iommu_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
|
||||
rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
|
||||
rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue