Merge commit 'v2.6.32-rc7'
[safe/jmp/linux-2.6] / arch / x86 / kernel / pci-dma.c
1 #include <linux/dma-mapping.h>
2 #include <linux/dma-debug.h>
3 #include <linux/dmar.h>
4 #include <linux/bootmem.h>
5 #include <linux/pci.h>
6 #include <linux/kmemleak.h>
7
8 #include <asm/proto.h>
9 #include <asm/dma.h>
10 #include <asm/iommu.h>
11 #include <asm/gart.h>
12 #include <asm/calgary.h>
13 #include <asm/amd_iommu.h>
14
15 static int forbid_dac __read_mostly;
16
17 struct dma_map_ops *dma_ops;
18 EXPORT_SYMBOL(dma_ops);
19
20 static int iommu_sac_force __read_mostly;
21
22 #ifdef CONFIG_IOMMU_DEBUG
23 int panic_on_overflow __read_mostly = 1;
24 int force_iommu __read_mostly = 1;
25 #else
26 int panic_on_overflow __read_mostly = 0;
27 int force_iommu __read_mostly = 0;
28 #endif
29
30 int iommu_merge __read_mostly = 0;
31
32 int no_iommu __read_mostly;
33 /* Set this to 1 if there is a HW IOMMU in the system */
34 int iommu_detected __read_mostly = 0;
35
36 /*
37  * This variable becomes 1 if iommu=pt is passed on the kernel command line.
38  * If this variable is 1, IOMMU implementations do no DMA translation for
39  * devices and allow every device to access to whole physical memory. This is
40  * useful if a user want to use an IOMMU only for KVM device assignment to
41  * guests and not for driver dma translation.
42  */
43 int iommu_pass_through __read_mostly;
44
45 dma_addr_t bad_dma_address __read_mostly = 0;
46 EXPORT_SYMBOL(bad_dma_address);
47
48 /* Dummy device used for NULL arguments (normally ISA). */
49 struct device x86_dma_fallback_dev = {
50         .init_name = "fallback device",
51         .coherent_dma_mask = ISA_DMA_BIT_MASK,
52         .dma_mask = &x86_dma_fallback_dev.coherent_dma_mask,
53 };
54 EXPORT_SYMBOL(x86_dma_fallback_dev);
55
56 /* Number of entries preallocated for DMA-API debugging */
57 #define PREALLOC_DMA_DEBUG_ENTRIES       32768
58
59 int dma_set_mask(struct device *dev, u64 mask)
60 {
61         if (!dev->dma_mask || !dma_supported(dev, mask))
62                 return -EIO;
63
64         *dev->dma_mask = mask;
65
66         return 0;
67 }
68 EXPORT_SYMBOL(dma_set_mask);
69
70 #ifdef CONFIG_X86_64
71 static __initdata void *dma32_bootmem_ptr;
72 static unsigned long dma32_bootmem_size __initdata = (128ULL<<20);
73
74 static int __init parse_dma32_size_opt(char *p)
75 {
76         if (!p)
77                 return -EINVAL;
78         dma32_bootmem_size = memparse(p, &p);
79         return 0;
80 }
81 early_param("dma32_size", parse_dma32_size_opt);
82
83 void __init dma32_reserve_bootmem(void)
84 {
85         unsigned long size, align;
86         if (max_pfn <= MAX_DMA32_PFN)
87                 return;
88
89         /*
90          * check aperture_64.c allocate_aperture() for reason about
91          * using 512M as goal
92          */
93         align = 64ULL<<20;
94         size = roundup(dma32_bootmem_size, align);
95         dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align,
96                                  512ULL<<20);
97         /*
98          * Kmemleak should not scan this block as it may not be mapped via the
99          * kernel direct mapping.
100          */
101         kmemleak_ignore(dma32_bootmem_ptr);
102         if (dma32_bootmem_ptr)
103                 dma32_bootmem_size = size;
104         else
105                 dma32_bootmem_size = 0;
106 }
107 static void __init dma32_free_bootmem(void)
108 {
109
110         if (max_pfn <= MAX_DMA32_PFN)
111                 return;
112
113         if (!dma32_bootmem_ptr)
114                 return;
115
116         free_bootmem(__pa(dma32_bootmem_ptr), dma32_bootmem_size);
117
118         dma32_bootmem_ptr = NULL;
119         dma32_bootmem_size = 0;
120 }
121 #endif
122
123 void __init pci_iommu_alloc(void)
124 {
125 #ifdef CONFIG_X86_64
126         /* free the range so iommu could get some range less than 4G */
127         dma32_free_bootmem();
128 #endif
129
130         /*
131          * The order of these functions is important for
132          * fall-back/fail-over reasons
133          */
134         gart_iommu_hole_init();
135
136         detect_calgary();
137
138         detect_intel_iommu();
139
140         amd_iommu_detect();
141
142         pci_swiotlb_init();
143 }
144
145 void *dma_generic_alloc_coherent(struct device *dev, size_t size,
146                                  dma_addr_t *dma_addr, gfp_t flag)
147 {
148         unsigned long dma_mask;
149         struct page *page;
150         dma_addr_t addr;
151
152         dma_mask = dma_alloc_coherent_mask(dev, flag);
153
154         flag |= __GFP_ZERO;
155 again:
156         page = alloc_pages_node(dev_to_node(dev), flag, get_order(size));
157         if (!page)
158                 return NULL;
159
160         addr = page_to_phys(page);
161         if (addr + size > dma_mask) {
162                 __free_pages(page, get_order(size));
163
164                 if (dma_mask < DMA_BIT_MASK(32) && !(flag & GFP_DMA)) {
165                         flag = (flag & ~GFP_DMA32) | GFP_DMA;
166                         goto again;
167                 }
168
169                 return NULL;
170         }
171
172         *dma_addr = addr;
173         return page_address(page);
174 }
175
176 /*
177  * See <Documentation/x86_64/boot-options.txt> for the iommu kernel parameter
178  * documentation.
179  */
180 static __init int iommu_setup(char *p)
181 {
182         iommu_merge = 1;
183
184         if (!p)
185                 return -EINVAL;
186
187         while (*p) {
188                 if (!strncmp(p, "off", 3))
189                         no_iommu = 1;
190                 /* gart_parse_options has more force support */
191                 if (!strncmp(p, "force", 5))
192                         force_iommu = 1;
193                 if (!strncmp(p, "noforce", 7)) {
194                         iommu_merge = 0;
195                         force_iommu = 0;
196                 }
197
198                 if (!strncmp(p, "biomerge", 8)) {
199                         iommu_merge = 1;
200                         force_iommu = 1;
201                 }
202                 if (!strncmp(p, "panic", 5))
203                         panic_on_overflow = 1;
204                 if (!strncmp(p, "nopanic", 7))
205                         panic_on_overflow = 0;
206                 if (!strncmp(p, "merge", 5)) {
207                         iommu_merge = 1;
208                         force_iommu = 1;
209                 }
210                 if (!strncmp(p, "nomerge", 7))
211                         iommu_merge = 0;
212                 if (!strncmp(p, "forcesac", 8))
213                         iommu_sac_force = 1;
214                 if (!strncmp(p, "allowdac", 8))
215                         forbid_dac = 0;
216                 if (!strncmp(p, "nodac", 5))
217                         forbid_dac = -1;
218                 if (!strncmp(p, "usedac", 6)) {
219                         forbid_dac = -1;
220                         return 1;
221                 }
222 #ifdef CONFIG_SWIOTLB
223                 if (!strncmp(p, "soft", 4))
224                         swiotlb = 1;
225 #endif
226                 if (!strncmp(p, "pt", 2))
227                         iommu_pass_through = 1;
228
229                 gart_parse_options(p);
230
231 #ifdef CONFIG_CALGARY_IOMMU
232                 if (!strncmp(p, "calgary", 7))
233                         use_calgary = 1;
234 #endif /* CONFIG_CALGARY_IOMMU */
235
236                 p += strcspn(p, ",");
237                 if (*p == ',')
238                         ++p;
239         }
240         return 0;
241 }
242 early_param("iommu", iommu_setup);
243
244 int dma_supported(struct device *dev, u64 mask)
245 {
246         struct dma_map_ops *ops = get_dma_ops(dev);
247
248 #ifdef CONFIG_PCI
249         if (mask > 0xffffffff && forbid_dac > 0) {
250                 dev_info(dev, "PCI: Disallowing DAC for device\n");
251                 return 0;
252         }
253 #endif
254
255         if (ops->dma_supported)
256                 return ops->dma_supported(dev, mask);
257
258         /* Copied from i386. Doesn't make much sense, because it will
259            only work for pci_alloc_coherent.
260            The caller just has to use GFP_DMA in this case. */
261         if (mask < DMA_BIT_MASK(24))
262                 return 0;
263
264         /* Tell the device to use SAC when IOMMU force is on.  This
265            allows the driver to use cheaper accesses in some cases.
266
267            Problem with this is that if we overflow the IOMMU area and
268            return DAC as fallback address the device may not handle it
269            correctly.
270
271            As a special case some controllers have a 39bit address
272            mode that is as efficient as 32bit (aic79xx). Don't force
273            SAC for these.  Assume all masks <= 40 bits are of this
274            type. Normally this doesn't make any difference, but gives
275            more gentle handling of IOMMU overflow. */
276         if (iommu_sac_force && (mask >= DMA_BIT_MASK(40))) {
277                 dev_info(dev, "Force SAC with mask %Lx\n", mask);
278                 return 0;
279         }
280
281         return 1;
282 }
283 EXPORT_SYMBOL(dma_supported);
284
285 static int __init pci_iommu_init(void)
286 {
287         dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
288
289 #ifdef CONFIG_PCI
290         dma_debug_add_bus(&pci_bus_type);
291 #endif
292
293         calgary_iommu_init();
294
295         intel_iommu_init();
296
297         amd_iommu_init();
298
299         gart_iommu_init();
300
301         no_iommu_init();
302         return 0;
303 }
304
305 void pci_iommu_shutdown(void)
306 {
307         gart_iommu_shutdown();
308
309         amd_iommu_shutdown();
310 }
311 /* Must execute after PCI subsystem */
312 rootfs_initcall(pci_iommu_init);
313
314 #ifdef CONFIG_PCI
315 /* Many VIA bridges seem to corrupt data for DAC. Disable it here */
316
317 static __devinit void via_no_dac(struct pci_dev *dev)
318 {
319         if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) {
320                 dev_info(&dev->dev, "disabling DAC on VIA PCI bridge\n");
321                 forbid_dac = 1;
322         }
323 }
324 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac);
325 #endif