aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/hw/ipath/Makefile1
-rw-r--r--drivers/infiniband/hw/ipath/ipath_driver.c6
-rw-r--r--drivers/infiniband/hw/ipath/ipath_file_ops.c7
-rw-r--r--drivers/infiniband/hw/ipath/ipath_wc_ppc64.c52
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
22ipath_core-$(CONFIG_X86_64) += ipath_wc_x86_64.o 22ipath_core-$(CONFIG_X86_64) += ipath_wc_x86_64.o
23ipath_core-$(CONFIG_PPC64) += ipath_wc_ppc64.o
23 24
24ib_ipath-y := \ 25ib_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 */
49int ipath_unordered_wc(void)
50{
51 return 1;
52}