diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/ipath/Makefile | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_driver.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_file_ops.c | 7 | ||||
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | 52 |
4 files changed, 66 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/ipath/Makefile b/drivers/infiniband/hw/ipath/Makefile index 6bb43474d10..075e313941f 100644 --- a/drivers/infiniband/hw/ipath/Makefile +++ b/drivers/infiniband/hw/ipath/Makefile | |||
@@ -20,6 +20,7 @@ ipath_core-y := \ | |||
20 | ipath_user_pages.o | 20 | ipath_user_pages.o |
21 | 21 | ||
22 | ipath_core-$(CONFIG_X86_64) += ipath_wc_x86_64.o | 22 | ipath_core-$(CONFIG_X86_64) += ipath_wc_x86_64.o |
23 | ipath_core-$(CONFIG_PPC64) += ipath_wc_ppc64.o | ||
23 | 24 | ||
24 | ib_ipath-y := \ | 25 | ib_ipath-y := \ |
25 | ipath_cq.o \ | 26 | ipath_cq.o \ |
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index f98518d912b..6ded914f9eb 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
@@ -440,7 +440,13 @@ static int __devinit ipath_init_one(struct pci_dev *pdev, | |||
440 | } | 440 | } |
441 | dd->ipath_pcirev = rev; | 441 | dd->ipath_pcirev = rev; |
442 | 442 | ||
443 | #if defined(__powerpc__) | ||
444 | /* There isn't a generic way to specify writethrough mappings */ | ||
445 | dd->ipath_kregbase = __ioremap(addr, len, | ||
446 | (_PAGE_NO_CACHE|_PAGE_WRITETHRU)); | ||
447 | #else | ||
443 | dd->ipath_kregbase = ioremap_nocache(addr, len); | 448 | dd->ipath_kregbase = ioremap_nocache(addr, len); |
449 | #endif | ||
444 | 450 | ||
445 | if (!dd->ipath_kregbase) { | 451 | if (!dd->ipath_kregbase) { |
446 | ipath_dbg("Unable to map io addr %llx to kvirt, failing\n", | 452 | ipath_dbg("Unable to map io addr %llx to kvirt, failing\n", |
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c index bbaa70e57db..0b6e7679eef 100644 --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c | |||
@@ -985,6 +985,13 @@ static int mmap_piobufs(struct vm_area_struct *vma, | |||
985 | * write combining behavior we want on the PIO buffers! | 985 | * write combining behavior we want on the PIO buffers! |
986 | */ | 986 | */ |
987 | 987 | ||
988 | #if defined(__powerpc__) | ||
989 | /* There isn't a generic way to specify writethrough mappings */ | ||
990 | pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; | ||
991 | pgprot_val(vma->vm_page_prot) |= _PAGE_WRITETHRU; | ||
992 | pgprot_val(vma->vm_page_prot) &= ~_PAGE_GUARDED; | ||
993 | #endif | ||
994 | |||
988 | if (vma->vm_flags & VM_READ) { | 995 | if (vma->vm_flags & VM_READ) { |
989 | dev_info(&dd->pcidev->dev, | 996 | dev_info(&dd->pcidev->dev, |
990 | "Can't map piobufs as readable (flags=%lx)\n", | 997 | "Can't map piobufs as readable (flags=%lx)\n", |
diff --git a/drivers/infiniband/hw/ipath/ipath_wc_ppc64.c b/drivers/infiniband/hw/ipath/ipath_wc_ppc64.c new file mode 100644 index 00000000000..036fde662aa --- /dev/null +++ b/drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2006 QLogic, Inc. All rights reserved. | ||
3 | * | ||
4 | * This software is available to you under a choice of one of two | ||
5 | * licenses. You may choose to be licensed under the terms of the GNU | ||
6 | * General Public License (GPL) Version 2, available from the file | ||
7 | * COPYING in the main directory of this source tree, or the | ||
8 | * OpenIB.org BSD license below: | ||
9 | * | ||
10 | * Redistribution and use in source and binary forms, with or | ||
11 | * without modification, are permitted provided that the following | ||
12 | * conditions are met: | ||
13 | * | ||
14 | * - Redistributions of source code must retain the above | ||
15 | * copyright notice, this list of conditions and the following | ||
16 | * disclaimer. | ||
17 | * | ||
18 | * - Redistributions in binary form must reproduce the above | ||
19 | * copyright notice, this list of conditions and the following | ||
20 | * disclaimer in the documentation and/or other materials | ||
21 | * provided with the distribution. | ||
22 | * | ||
23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
24 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
25 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
26 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
27 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
30 | * SOFTWARE. | ||
31 | */ | ||
32 | |||
33 | /* | ||
34 | * This file is conditionally built on PowerPC only. Otherwise weak symbol | ||
35 | * versions of the functions exported from here are used. | ||
36 | */ | ||
37 | |||
38 | #include "ipath_kernel.h" | ||
39 | |||
40 | /** | ||
41 | * ipath_unordered_wc - indicate whether write combining is ordered | ||
42 | * | ||
43 | * PowerPC systems (at least those in the 970 processor family) | ||
44 | * write partially filled store buffers in address order, but will write | ||
45 | * completely filled store buffers in "random" order, and therefore must | ||
46 | * have serialization for correctness with current InfiniPath chips. | ||
47 | * | ||
48 | */ | ||
49 | int ipath_unordered_wc(void) | ||
50 | { | ||
51 | return 1; | ||
52 | } | ||