To allow specification whether to use v1 or v2 IOMMU pagetable for DMA remapping when calling kernel DMA-API.
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com> --- Documentation/admin-guide/kernel-parameters.txt | 6 ++++++ drivers/iommu/amd/init.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 04545725f187..466e807369ea 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -319,6 +319,12 @@ This mode requires kvm-amd.avic=1. (Default when IOMMU HW support is present.) + amd_iommu_pgtable= [HW,X86-64] + Specifies one of the following AMD IOMMU page table to + be used for DMA remapping for DMA-API: + v1 - Use v1 page table (Default) + v2 - Use v2 page table + amijoy.map= [HW,JOY] Amiga joystick support Map of devices attached to JOY0DAT and JOY1DAT Format: <a>,<b> diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index 9265c1bf1d84..6d5163bfb87e 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -3123,6 +3123,20 @@ static int __init parse_amd_iommu_dump(char *str) return 1; } +static int __init parse_amd_iommu_pgtable(char *str) +{ + for (; *str; ++str) { + if (strncmp(str, "v1", 2) == 0) { + amd_iommu_pgtable = AMD_IOMMU_V1; + break; + } else if (strncmp(str, "v2", 2) == 0) { + amd_iommu_pgtable = AMD_IOMMU_V2; + break; + } + } + return 1; +} + static int __init parse_amd_iommu_intr(char *str) { for (; *str; ++str) { @@ -3246,6 +3260,7 @@ static int __init parse_ivrs_acpihid(char *str) __setup("amd_iommu_dump", parse_amd_iommu_dump); __setup("amd_iommu=", parse_amd_iommu_options); +__setup("amd_iommu_pgtable=", parse_amd_iommu_pgtable); __setup("amd_iommu_intr=", parse_amd_iommu_intr); __setup("ivrs_ioapic", parse_ivrs_ioapic); __setup("ivrs_hpet", parse_ivrs_hpet); -- 2.17.1