/* iommu=[size][,noagp][,off][,force][,noforce][,leak][,memaper[=order]][,merge] [,forcesac][,fullflush][,nomerge][,biomerge] size set size of iommu (in bytes) noagp don't initialize the AGP driver and use full aperture. off don't use the IOMMU leak turn on simple iommu leak tracing (only when CONFIG_IOMMU_LEAK is on) memaper[=order] allocate an own aperture over RAM with size 32MB^order. noforce don't force IOMMU usage. Default. force Force IOMMU. merge Do lazy merging. This may improve performance on some block devices. Implies force (experimental) biomerge Do merging at the BIO layer. This is more efficient than merge, but should be only done with very big IOMMUs. Implies merge,force. nomerge Don't do SG merging. forcesac For SAC mode for masks <40bits (experimental) fullflush Flush IOMMU on each allocation (default) nofullflush Don't use IOMMU fullflush allowed overwrite iommu off workarounds for specific chipsets. soft Use software bounce buffering (default for Intel machines) noaperture Don't touch the aperture for AGP. */ __init int iommu_setup(char *p) { iommu_merge = 1; while (*p) { if (!strncmp(p,"off",3)) no_iommu = 1; /* gart_parse_options has more force support */ if (!strncmp(p,"force",5)) force_iommu = 1; if (!strncmp(p,"noforce",7)) { iommu_merge = 0; force_iommu = 0; } if (!strncmp(p, "biomerge",8)) { iommu_bio_merge = 4096; iommu_merge = 1; force_iommu = 1; } if (!strncmp(p, "panic",5)) panic_on_overflow = 1; if (!strncmp(p, "nopanic",7)) panic_on_overflow = 0; if (!strncmp(p, "merge",5)) { iommu_merge = 1; force_iommu = 1; } if (!strncmp(p, "nomerge",7)) iommu_merge = 0; if (!strncmp(p, "forcesac",8)) iommu_sac_force = 1; #ifdef CONFIG_SWIOTLB if (!strncmp(p, "soft",4)) swiotlb = 1; if (!strncmp(p, "pt", 2)) iommu_pass_through = 1; #endif #ifdef CONFIG_IOMMU gart_parse_options(p); #endif #ifdef CONFIG_CALGARY_IOMMU if (!strncmp(p, "calgary", 7)) use_calgary = 1; #endif /* CONFIG_CALGARY_IOMMU */ p += strcspn(p, ","); if (*p == ',') ++p; } return 1; }
/* * See <Documentation/x86/x86_64/boot-options.txt> for the iommu kernel * parameter documentation. */ static __init int iommu_setup(char *p) { iommu_merge = 1; if (!p) return -EINVAL; while (*p) { if (!strncmp(p, "off", 3)) no_iommu = 1; /* gart_parse_options has more force support */ if (!strncmp(p, "force", 5)) force_iommu = 1; if (!strncmp(p, "noforce", 7)) { iommu_merge = 0; force_iommu = 0; } if (!strncmp(p, "biomerge", 8)) { iommu_merge = 1; force_iommu = 1; } if (!strncmp(p, "panic", 5)) panic_on_overflow = 1; if (!strncmp(p, "nopanic", 7)) panic_on_overflow = 0; if (!strncmp(p, "merge", 5)) { iommu_merge = 1; force_iommu = 1; } if (!strncmp(p, "nomerge", 7)) iommu_merge = 0; if (!strncmp(p, "forcesac", 8)) pr_warn("forcesac option ignored.\n"); if (!strncmp(p, "allowdac", 8)) pr_warn("allowdac option ignored.\n"); if (!strncmp(p, "nodac", 5)) pr_warn("nodac option ignored.\n"); if (!strncmp(p, "usedac", 6)) { disable_dac_quirk = true; return 1; } #ifdef CONFIG_SWIOTLB if (!strncmp(p, "soft", 4)) swiotlb = 1; #endif if (!strncmp(p, "pt", 2)) iommu_pass_through = 1; if (!strncmp(p, "nopt", 4)) iommu_pass_through = 0; gart_parse_options(p); #ifdef CONFIG_CALGARY_IOMMU if (!strncmp(p, "calgary", 7)) use_calgary = 1; #endif /* CONFIG_CALGARY_IOMMU */ p += strcspn(p, ","); if (*p == ',') ++p; } return 0; }