Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ece66840 authored by Andi Kleen's avatar Andi Kleen Committed by Andi Kleen
Browse files

[PATCH] Allow disabling DAC using command line options



Might or might not work around some reported bugs on VIA systems.

Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent b885808e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -199,6 +199,10 @@ IOMMU
   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.
   allowdac Allow DMA >4GB
	    When off all DMA over >4GB is forced through an IOMMU or bounce
	    buffering.
   nodac    Forbid DMA >4GB

  swiotlb=pages[,force]

+18 −0
Original line number Diff line number Diff line
@@ -170,8 +170,20 @@ void dma_free_coherent(struct device *dev, size_t size,
}
EXPORT_SYMBOL(dma_free_coherent);

static int forbid_dac __read_mostly;

int dma_supported(struct device *dev, u64 mask)
{
#ifdef CONFIG_PCI
	if (mask > 0xffffffff && forbid_dac > 0) {



		printk(KERN_INFO "PCI: Disallowing DAC for device %s\n", dev->bus_id);
		return 0;
	}
#endif

	if (dma_ops->dma_supported)
		return dma_ops->dma_supported(dev, mask);

@@ -231,6 +243,8 @@ EXPORT_SYMBOL(dma_set_mask);
   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.
   allowdac Allow DMA >4GB
   nodac    Forbid DMA >4GB
*/
__init int iommu_setup(char *p)
{
@@ -267,6 +281,10 @@ __init int iommu_setup(char *p)
		    iommu_merge = 0;
	    if (!strncmp(p, "forcesac",8))
		    iommu_sac_force = 1;
	    if (!strncmp(p, "allowdac", 8))
		    forbid_dac = 0;
	    if (!strncmp(p, "nodac", 5))
		    forbid_dac = -1;

#ifdef CONFIG_SWIOTLB
	    if (!strncmp(p, "soft",4))