diff options
author | Frederic Barrat <fbarrat@linux.ibm.com> | 2018-06-28 06:05:08 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2018-07-02 09:54:33 -0400 |
commit | f18a4e1d973bc69a50419eb8918f458ea89c6c3f (patch) | |
tree | 156c85a02e40f27ba93f123e70d911e4d35bd102 | |
parent | 322dc4af6c95cddc4f9d806197fe6b376cfae350 (diff) |
Revert "cxl: Allow a default context to be associated with an external pci_dev"
Remove abandonned capi support for the Mellanox CX4.
This reverts commit a19bd79e31769626d288cc016e21a31b6f47bf6f.
Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | drivers/misc/cxl/Makefile | 2 | ||||
-rw-r--r-- | drivers/misc/cxl/base.c | 35 | ||||
-rw-r--r-- | drivers/misc/cxl/cxl.h | 6 | ||||
-rw-r--r-- | drivers/misc/cxl/main.c | 2 | ||||
-rw-r--r-- | drivers/misc/cxl/phb.c | 44 | ||||
-rw-r--r-- | drivers/misc/cxl/vphb.c | 30 | ||||
-rw-r--r-- | include/misc/cxl-base.h | 6 |
7 files changed, 28 insertions, 97 deletions
diff --git a/drivers/misc/cxl/Makefile b/drivers/misc/cxl/Makefile index 502d41fc9ea5..5eea61b9584f 100644 --- a/drivers/misc/cxl/Makefile +++ b/drivers/misc/cxl/Makefile | |||
@@ -4,7 +4,7 @@ ccflags-$(CONFIG_PPC_WERROR) += -Werror | |||
4 | 4 | ||
5 | cxl-y += main.o file.o irq.o fault.o native.o | 5 | cxl-y += main.o file.o irq.o fault.o native.o |
6 | cxl-y += context.o sysfs.o pci.o trace.o | 6 | cxl-y += context.o sysfs.o pci.o trace.o |
7 | cxl-y += vphb.o phb.o api.o cxllib.o | 7 | cxl-y += vphb.o api.o cxllib.o |
8 | cxl-$(CONFIG_PPC_PSERIES) += flash.o guest.o of.o hcalls.o | 8 | cxl-$(CONFIG_PPC_PSERIES) += flash.o guest.o of.o hcalls.o |
9 | cxl-$(CONFIG_DEBUG_FS) += debugfs.o | 9 | cxl-$(CONFIG_DEBUG_FS) += debugfs.o |
10 | obj-$(CONFIG_CXL) += cxl.o | 10 | obj-$(CONFIG_CXL) += cxl.o |
diff --git a/drivers/misc/cxl/base.c b/drivers/misc/cxl/base.c index e1e80cb99ad9..7557835cdfcd 100644 --- a/drivers/misc/cxl/base.c +++ b/drivers/misc/cxl/base.c | |||
@@ -106,41 +106,6 @@ int cxl_update_properties(struct device_node *dn, | |||
106 | } | 106 | } |
107 | EXPORT_SYMBOL_GPL(cxl_update_properties); | 107 | EXPORT_SYMBOL_GPL(cxl_update_properties); |
108 | 108 | ||
109 | /* | ||
110 | * API calls into the driver that may be called from the PHB code and must be | ||
111 | * built in. | ||
112 | */ | ||
113 | bool cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu) | ||
114 | { | ||
115 | bool ret; | ||
116 | struct cxl_calls *calls; | ||
117 | |||
118 | calls = cxl_calls_get(); | ||
119 | if (!calls) | ||
120 | return false; | ||
121 | |||
122 | ret = calls->cxl_pci_associate_default_context(dev, afu); | ||
123 | |||
124 | cxl_calls_put(calls); | ||
125 | |||
126 | return ret; | ||
127 | } | ||
128 | EXPORT_SYMBOL_GPL(cxl_pci_associate_default_context); | ||
129 | |||
130 | void cxl_pci_disable_device(struct pci_dev *dev) | ||
131 | { | ||
132 | struct cxl_calls *calls; | ||
133 | |||
134 | calls = cxl_calls_get(); | ||
135 | if (!calls) | ||
136 | return; | ||
137 | |||
138 | calls->cxl_pci_disable_device(dev); | ||
139 | |||
140 | cxl_calls_put(calls); | ||
141 | } | ||
142 | EXPORT_SYMBOL_GPL(cxl_pci_disable_device); | ||
143 | |||
144 | static int __init cxl_base_init(void) | 109 | static int __init cxl_base_init(void) |
145 | { | 110 | { |
146 | struct device_node *np; | 111 | struct device_node *np; |
diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h index d95c2c98f2ab..aa453448201d 100644 --- a/drivers/misc/cxl/cxl.h +++ b/drivers/misc/cxl/cxl.h | |||
@@ -867,15 +867,9 @@ static inline bool cxl_is_power9_dd1(void) | |||
867 | ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf, | 867 | ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf, |
868 | loff_t off, size_t count); | 868 | loff_t off, size_t count); |
869 | 869 | ||
870 | /* Internal functions wrapped in cxl_base to allow PHB to call them */ | ||
871 | bool _cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu); | ||
872 | void _cxl_pci_disable_device(struct pci_dev *dev); | ||
873 | 870 | ||
874 | struct cxl_calls { | 871 | struct cxl_calls { |
875 | void (*cxl_slbia)(struct mm_struct *mm); | 872 | void (*cxl_slbia)(struct mm_struct *mm); |
876 | bool (*cxl_pci_associate_default_context)(struct pci_dev *dev, struct cxl_afu *afu); | ||
877 | void (*cxl_pci_disable_device)(struct pci_dev *dev); | ||
878 | |||
879 | struct module *owner; | 873 | struct module *owner; |
880 | }; | 874 | }; |
881 | int register_cxl_calls(struct cxl_calls *calls); | 875 | int register_cxl_calls(struct cxl_calls *calls); |
diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c index a7e83624034b..334223b802ee 100644 --- a/drivers/misc/cxl/main.c +++ b/drivers/misc/cxl/main.c | |||
@@ -104,8 +104,6 @@ static inline void cxl_slbia_core(struct mm_struct *mm) | |||
104 | 104 | ||
105 | static struct cxl_calls cxl_calls = { | 105 | static struct cxl_calls cxl_calls = { |
106 | .cxl_slbia = cxl_slbia_core, | 106 | .cxl_slbia = cxl_slbia_core, |
107 | .cxl_pci_associate_default_context = _cxl_pci_associate_default_context, | ||
108 | .cxl_pci_disable_device = _cxl_pci_disable_device, | ||
109 | .owner = THIS_MODULE, | 107 | .owner = THIS_MODULE, |
110 | }; | 108 | }; |
111 | 109 | ||
diff --git a/drivers/misc/cxl/phb.c b/drivers/misc/cxl/phb.c deleted file mode 100644 index 6ec69ada19f4..000000000000 --- a/drivers/misc/cxl/phb.c +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2014-2016 IBM Corp. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version | ||
7 | * 2 of the License, or (at your option) any later version. | ||
8 | */ | ||
9 | |||
10 | #include <linux/pci.h> | ||
11 | #include "cxl.h" | ||
12 | |||
13 | bool _cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu) | ||
14 | { | ||
15 | struct cxl_context *ctx; | ||
16 | |||
17 | /* | ||
18 | * Allocate a context to do cxl things to. This is used for interrupts | ||
19 | * in the peer model using a real phb, and if we eventually do DMA ops | ||
20 | * in the virtual phb, we'll need a default context to attach them to. | ||
21 | */ | ||
22 | ctx = cxl_dev_context_init(dev); | ||
23 | if (IS_ERR(ctx)) | ||
24 | return false; | ||
25 | dev->dev.archdata.cxl_ctx = ctx; | ||
26 | |||
27 | return (cxl_ops->afu_check_and_enable(afu) == 0); | ||
28 | } | ||
29 | /* exported via cxl_base */ | ||
30 | |||
31 | void _cxl_pci_disable_device(struct pci_dev *dev) | ||
32 | { | ||
33 | struct cxl_context *ctx = cxl_get_context(dev); | ||
34 | |||
35 | if (ctx) { | ||
36 | if (ctx->status == STARTED) { | ||
37 | dev_err(&dev->dev, "Default context started\n"); | ||
38 | return; | ||
39 | } | ||
40 | dev->dev.archdata.cxl_ctx = NULL; | ||
41 | cxl_release_context(ctx); | ||
42 | } | ||
43 | } | ||
44 | /* exported via cxl_base */ | ||
diff --git a/drivers/misc/cxl/vphb.c b/drivers/misc/cxl/vphb.c index 1a99c9c7a6fb..7908633d9204 100644 --- a/drivers/misc/cxl/vphb.c +++ b/drivers/misc/cxl/vphb.c | |||
@@ -44,6 +44,7 @@ static bool cxl_pci_enable_device_hook(struct pci_dev *dev) | |||
44 | { | 44 | { |
45 | struct pci_controller *phb; | 45 | struct pci_controller *phb; |
46 | struct cxl_afu *afu; | 46 | struct cxl_afu *afu; |
47 | struct cxl_context *ctx; | ||
47 | 48 | ||
48 | phb = pci_bus_to_host(dev->bus); | 49 | phb = pci_bus_to_host(dev->bus); |
49 | afu = (struct cxl_afu *)phb->private_data; | 50 | afu = (struct cxl_afu *)phb->private_data; |
@@ -56,7 +57,30 @@ static bool cxl_pci_enable_device_hook(struct pci_dev *dev) | |||
56 | set_dma_ops(&dev->dev, &dma_nommu_ops); | 57 | set_dma_ops(&dev->dev, &dma_nommu_ops); |
57 | set_dma_offset(&dev->dev, PAGE_OFFSET); | 58 | set_dma_offset(&dev->dev, PAGE_OFFSET); |
58 | 59 | ||
59 | return _cxl_pci_associate_default_context(dev, afu); | 60 | /* |
61 | * Allocate a context to do cxl things too. If we eventually do real | ||
62 | * DMA ops, we'll need a default context to attach them to | ||
63 | */ | ||
64 | ctx = cxl_dev_context_init(dev); | ||
65 | if (IS_ERR(ctx)) | ||
66 | return false; | ||
67 | dev->dev.archdata.cxl_ctx = ctx; | ||
68 | |||
69 | return (cxl_ops->afu_check_and_enable(afu) == 0); | ||
70 | } | ||
71 | |||
72 | static void cxl_pci_disable_device(struct pci_dev *dev) | ||
73 | { | ||
74 | struct cxl_context *ctx = cxl_get_context(dev); | ||
75 | |||
76 | if (ctx) { | ||
77 | if (ctx->status == STARTED) { | ||
78 | dev_err(&dev->dev, "Default context started\n"); | ||
79 | return; | ||
80 | } | ||
81 | dev->dev.archdata.cxl_ctx = NULL; | ||
82 | cxl_release_context(ctx); | ||
83 | } | ||
60 | } | 84 | } |
61 | 85 | ||
62 | static resource_size_t cxl_pci_window_alignment(struct pci_bus *bus, | 86 | static resource_size_t cxl_pci_window_alignment(struct pci_bus *bus, |
@@ -190,8 +214,8 @@ static struct pci_controller_ops cxl_pci_controller_ops = | |||
190 | { | 214 | { |
191 | .probe_mode = cxl_pci_probe_mode, | 215 | .probe_mode = cxl_pci_probe_mode, |
192 | .enable_device_hook = cxl_pci_enable_device_hook, | 216 | .enable_device_hook = cxl_pci_enable_device_hook, |
193 | .disable_device = _cxl_pci_disable_device, | 217 | .disable_device = cxl_pci_disable_device, |
194 | .release_device = _cxl_pci_disable_device, | 218 | .release_device = cxl_pci_disable_device, |
195 | .window_alignment = cxl_pci_window_alignment, | 219 | .window_alignment = cxl_pci_window_alignment, |
196 | .reset_secondary_bus = cxl_pci_reset_secondary_bus, | 220 | .reset_secondary_bus = cxl_pci_reset_secondary_bus, |
197 | .setup_msi_irqs = cxl_setup_msi_irqs, | 221 | .setup_msi_irqs = cxl_setup_msi_irqs, |
diff --git a/include/misc/cxl-base.h b/include/misc/cxl-base.h index bb7e629ae492..f53808fa638a 100644 --- a/include/misc/cxl-base.h +++ b/include/misc/cxl-base.h | |||
@@ -10,8 +10,6 @@ | |||
10 | #ifndef _MISC_CXL_BASE_H | 10 | #ifndef _MISC_CXL_BASE_H |
11 | #define _MISC_CXL_BASE_H | 11 | #define _MISC_CXL_BASE_H |
12 | 12 | ||
13 | #include <misc/cxl.h> | ||
14 | |||
15 | #ifdef CONFIG_CXL_BASE | 13 | #ifdef CONFIG_CXL_BASE |
16 | 14 | ||
17 | #define CXL_IRQ_RANGES 4 | 15 | #define CXL_IRQ_RANGES 4 |
@@ -41,8 +39,6 @@ static inline void cxl_ctx_put(void) | |||
41 | struct cxl_afu *cxl_afu_get(struct cxl_afu *afu); | 39 | struct cxl_afu *cxl_afu_get(struct cxl_afu *afu); |
42 | void cxl_afu_put(struct cxl_afu *afu); | 40 | void cxl_afu_put(struct cxl_afu *afu); |
43 | void cxl_slbia(struct mm_struct *mm); | 41 | void cxl_slbia(struct mm_struct *mm); |
44 | bool cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu); | ||
45 | void cxl_pci_disable_device(struct pci_dev *dev); | ||
46 | 42 | ||
47 | #else /* CONFIG_CXL_BASE */ | 43 | #else /* CONFIG_CXL_BASE */ |
48 | 44 | ||
@@ -50,8 +46,6 @@ static inline bool cxl_ctx_in_use(void) { return false; } | |||
50 | static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; } | 46 | static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; } |
51 | static inline void cxl_afu_put(struct cxl_afu *afu) {} | 47 | static inline void cxl_afu_put(struct cxl_afu *afu) {} |
52 | static inline void cxl_slbia(struct mm_struct *mm) {} | 48 | static inline void cxl_slbia(struct mm_struct *mm) {} |
53 | static inline bool cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu) { return false; } | ||
54 | static inline void cxl_pci_disable_device(struct pci_dev *dev) {} | ||
55 | 49 | ||
56 | #endif /* CONFIG_CXL_BASE */ | 50 | #endif /* CONFIG_CXL_BASE */ |
57 | 51 | ||