dmaengine: idxd: create kmem cache for event log fault items
[linux-block.git] / drivers / dma / idxd / init.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3 #include <linux/init.h>
4 #include <linux/kernel.h>
5 #include <linux/module.h>
6 #include <linux/slab.h>
7 #include <linux/pci.h>
8 #include <linux/interrupt.h>
9 #include <linux/delay.h>
10 #include <linux/dma-mapping.h>
11 #include <linux/workqueue.h>
12 #include <linux/fs.h>
13 #include <linux/io-64-nonatomic-lo-hi.h>
14 #include <linux/device.h>
15 #include <linux/idr.h>
16 #include <linux/iommu.h>
17 #include <uapi/linux/idxd.h>
18 #include <linux/dmaengine.h>
19 #include "../dmaengine.h"
20 #include "registers.h"
21 #include "idxd.h"
22 #include "perfmon.h"
23
24 MODULE_VERSION(IDXD_DRIVER_VERSION);
25 MODULE_LICENSE("GPL v2");
26 MODULE_AUTHOR("Intel Corporation");
27 MODULE_IMPORT_NS(IDXD);
28
29 static bool sva = true;
30 module_param(sva, bool, 0644);
31 MODULE_PARM_DESC(sva, "Toggle SVA support on/off");
32
33 bool tc_override;
34 module_param(tc_override, bool, 0644);
35 MODULE_PARM_DESC(tc_override, "Override traffic class defaults");
36
37 #define DRV_NAME "idxd"
38
39 bool support_enqcmd;
40 DEFINE_IDA(idxd_ida);
41
42 static struct idxd_driver_data idxd_driver_data[] = {
43         [IDXD_TYPE_DSA] = {
44                 .name_prefix = "dsa",
45                 .type = IDXD_TYPE_DSA,
46                 .compl_size = sizeof(struct dsa_completion_record),
47                 .align = 32,
48                 .dev_type = &dsa_device_type,
49         },
50         [IDXD_TYPE_IAX] = {
51                 .name_prefix = "iax",
52                 .type = IDXD_TYPE_IAX,
53                 .compl_size = sizeof(struct iax_completion_record),
54                 .align = 64,
55                 .dev_type = &iax_device_type,
56         },
57 };
58
59 static struct pci_device_id idxd_pci_tbl[] = {
60         /* DSA ver 1.0 platforms */
61         { PCI_DEVICE_DATA(INTEL, DSA_SPR0, &idxd_driver_data[IDXD_TYPE_DSA]) },
62
63         /* IAX ver 1.0 platforms */
64         { PCI_DEVICE_DATA(INTEL, IAX_SPR0, &idxd_driver_data[IDXD_TYPE_IAX]) },
65         { 0, }
66 };
67 MODULE_DEVICE_TABLE(pci, idxd_pci_tbl);
68
69 static int idxd_setup_interrupts(struct idxd_device *idxd)
70 {
71         struct pci_dev *pdev = idxd->pdev;
72         struct device *dev = &pdev->dev;
73         struct idxd_irq_entry *ie;
74         int i, msixcnt;
75         int rc = 0;
76
77         msixcnt = pci_msix_vec_count(pdev);
78         if (msixcnt < 0) {
79                 dev_err(dev, "Not MSI-X interrupt capable.\n");
80                 return -ENOSPC;
81         }
82         idxd->irq_cnt = msixcnt;
83
84         rc = pci_alloc_irq_vectors(pdev, msixcnt, msixcnt, PCI_IRQ_MSIX);
85         if (rc != msixcnt) {
86                 dev_err(dev, "Failed enabling %d MSIX entries: %d\n", msixcnt, rc);
87                 return -ENOSPC;
88         }
89         dev_dbg(dev, "Enabled %d msix vectors\n", msixcnt);
90
91
92         ie = idxd_get_ie(idxd, 0);
93         ie->vector = pci_irq_vector(pdev, 0);
94         rc = request_threaded_irq(ie->vector, NULL, idxd_misc_thread, 0, "idxd-misc", ie);
95         if (rc < 0) {
96                 dev_err(dev, "Failed to allocate misc interrupt.\n");
97                 goto err_misc_irq;
98         }
99         dev_dbg(dev, "Requested idxd-misc handler on msix vector %d\n", ie->vector);
100
101         for (i = 0; i < idxd->max_wqs; i++) {
102                 int msix_idx = i + 1;
103
104                 ie = idxd_get_ie(idxd, msix_idx);
105                 ie->id = msix_idx;
106                 ie->int_handle = INVALID_INT_HANDLE;
107                 ie->pasid = INVALID_IOASID;
108
109                 spin_lock_init(&ie->list_lock);
110                 init_llist_head(&ie->pending_llist);
111                 INIT_LIST_HEAD(&ie->work_list);
112         }
113
114         idxd_unmask_error_interrupts(idxd);
115         return 0;
116
117  err_misc_irq:
118         idxd_mask_error_interrupts(idxd);
119         pci_free_irq_vectors(pdev);
120         dev_err(dev, "No usable interrupts\n");
121         return rc;
122 }
123
124 static void idxd_cleanup_interrupts(struct idxd_device *idxd)
125 {
126         struct pci_dev *pdev = idxd->pdev;
127         struct idxd_irq_entry *ie;
128         int msixcnt;
129
130         msixcnt = pci_msix_vec_count(pdev);
131         if (msixcnt <= 0)
132                 return;
133
134         ie = idxd_get_ie(idxd, 0);
135         idxd_mask_error_interrupts(idxd);
136         free_irq(ie->vector, ie);
137         pci_free_irq_vectors(pdev);
138 }
139
140 static int idxd_setup_wqs(struct idxd_device *idxd)
141 {
142         struct device *dev = &idxd->pdev->dev;
143         struct idxd_wq *wq;
144         struct device *conf_dev;
145         int i, rc;
146
147         idxd->wqs = kcalloc_node(idxd->max_wqs, sizeof(struct idxd_wq *),
148                                  GFP_KERNEL, dev_to_node(dev));
149         if (!idxd->wqs)
150                 return -ENOMEM;
151
152         idxd->wq_enable_map = bitmap_zalloc_node(idxd->max_wqs, GFP_KERNEL, dev_to_node(dev));
153         if (!idxd->wq_enable_map) {
154                 kfree(idxd->wqs);
155                 return -ENOMEM;
156         }
157
158         for (i = 0; i < idxd->max_wqs; i++) {
159                 wq = kzalloc_node(sizeof(*wq), GFP_KERNEL, dev_to_node(dev));
160                 if (!wq) {
161                         rc = -ENOMEM;
162                         goto err;
163                 }
164
165                 idxd_dev_set_type(&wq->idxd_dev, IDXD_DEV_WQ);
166                 conf_dev = wq_confdev(wq);
167                 wq->id = i;
168                 wq->idxd = idxd;
169                 device_initialize(wq_confdev(wq));
170                 conf_dev->parent = idxd_confdev(idxd);
171                 conf_dev->bus = &dsa_bus_type;
172                 conf_dev->type = &idxd_wq_device_type;
173                 rc = dev_set_name(conf_dev, "wq%d.%d", idxd->id, wq->id);
174                 if (rc < 0) {
175                         put_device(conf_dev);
176                         goto err;
177                 }
178
179                 mutex_init(&wq->wq_lock);
180                 init_waitqueue_head(&wq->err_queue);
181                 init_completion(&wq->wq_dead);
182                 init_completion(&wq->wq_resurrect);
183                 wq->max_xfer_bytes = WQ_DEFAULT_MAX_XFER;
184                 idxd_wq_set_max_batch_size(idxd->data->type, wq, WQ_DEFAULT_MAX_BATCH);
185                 wq->enqcmds_retries = IDXD_ENQCMDS_RETRIES;
186                 wq->wqcfg = kzalloc_node(idxd->wqcfg_size, GFP_KERNEL, dev_to_node(dev));
187                 if (!wq->wqcfg) {
188                         put_device(conf_dev);
189                         rc = -ENOMEM;
190                         goto err;
191                 }
192
193                 if (idxd->hw.wq_cap.op_config) {
194                         wq->opcap_bmap = bitmap_zalloc(IDXD_MAX_OPCAP_BITS, GFP_KERNEL);
195                         if (!wq->opcap_bmap) {
196                                 put_device(conf_dev);
197                                 rc = -ENOMEM;
198                                 goto err;
199                         }
200                         bitmap_copy(wq->opcap_bmap, idxd->opcap_bmap, IDXD_MAX_OPCAP_BITS);
201                 }
202                 idxd->wqs[i] = wq;
203         }
204
205         return 0;
206
207  err:
208         while (--i >= 0) {
209                 wq = idxd->wqs[i];
210                 conf_dev = wq_confdev(wq);
211                 put_device(conf_dev);
212         }
213         return rc;
214 }
215
216 static int idxd_setup_engines(struct idxd_device *idxd)
217 {
218         struct idxd_engine *engine;
219         struct device *dev = &idxd->pdev->dev;
220         struct device *conf_dev;
221         int i, rc;
222
223         idxd->engines = kcalloc_node(idxd->max_engines, sizeof(struct idxd_engine *),
224                                      GFP_KERNEL, dev_to_node(dev));
225         if (!idxd->engines)
226                 return -ENOMEM;
227
228         for (i = 0; i < idxd->max_engines; i++) {
229                 engine = kzalloc_node(sizeof(*engine), GFP_KERNEL, dev_to_node(dev));
230                 if (!engine) {
231                         rc = -ENOMEM;
232                         goto err;
233                 }
234
235                 idxd_dev_set_type(&engine->idxd_dev, IDXD_DEV_ENGINE);
236                 conf_dev = engine_confdev(engine);
237                 engine->id = i;
238                 engine->idxd = idxd;
239                 device_initialize(conf_dev);
240                 conf_dev->parent = idxd_confdev(idxd);
241                 conf_dev->bus = &dsa_bus_type;
242                 conf_dev->type = &idxd_engine_device_type;
243                 rc = dev_set_name(conf_dev, "engine%d.%d", idxd->id, engine->id);
244                 if (rc < 0) {
245                         put_device(conf_dev);
246                         goto err;
247                 }
248
249                 idxd->engines[i] = engine;
250         }
251
252         return 0;
253
254  err:
255         while (--i >= 0) {
256                 engine = idxd->engines[i];
257                 conf_dev = engine_confdev(engine);
258                 put_device(conf_dev);
259         }
260         return rc;
261 }
262
263 static int idxd_setup_groups(struct idxd_device *idxd)
264 {
265         struct device *dev = &idxd->pdev->dev;
266         struct device *conf_dev;
267         struct idxd_group *group;
268         int i, rc;
269
270         idxd->groups = kcalloc_node(idxd->max_groups, sizeof(struct idxd_group *),
271                                     GFP_KERNEL, dev_to_node(dev));
272         if (!idxd->groups)
273                 return -ENOMEM;
274
275         for (i = 0; i < idxd->max_groups; i++) {
276                 group = kzalloc_node(sizeof(*group), GFP_KERNEL, dev_to_node(dev));
277                 if (!group) {
278                         rc = -ENOMEM;
279                         goto err;
280                 }
281
282                 idxd_dev_set_type(&group->idxd_dev, IDXD_DEV_GROUP);
283                 conf_dev = group_confdev(group);
284                 group->id = i;
285                 group->idxd = idxd;
286                 device_initialize(conf_dev);
287                 conf_dev->parent = idxd_confdev(idxd);
288                 conf_dev->bus = &dsa_bus_type;
289                 conf_dev->type = &idxd_group_device_type;
290                 rc = dev_set_name(conf_dev, "group%d.%d", idxd->id, group->id);
291                 if (rc < 0) {
292                         put_device(conf_dev);
293                         goto err;
294                 }
295
296                 idxd->groups[i] = group;
297                 if (idxd->hw.version <= DEVICE_VERSION_2 && !tc_override) {
298                         group->tc_a = 1;
299                         group->tc_b = 1;
300                 } else {
301                         group->tc_a = -1;
302                         group->tc_b = -1;
303                 }
304                 /*
305                  * The default value is the same as the value of
306                  * total read buffers in GRPCAP.
307                  */
308                 group->rdbufs_allowed = idxd->max_rdbufs;
309         }
310
311         return 0;
312
313  err:
314         while (--i >= 0) {
315                 group = idxd->groups[i];
316                 put_device(group_confdev(group));
317         }
318         return rc;
319 }
320
321 static void idxd_cleanup_internals(struct idxd_device *idxd)
322 {
323         int i;
324
325         for (i = 0; i < idxd->max_groups; i++)
326                 put_device(group_confdev(idxd->groups[i]));
327         for (i = 0; i < idxd->max_engines; i++)
328                 put_device(engine_confdev(idxd->engines[i]));
329         for (i = 0; i < idxd->max_wqs; i++)
330                 put_device(wq_confdev(idxd->wqs[i]));
331         destroy_workqueue(idxd->wq);
332 }
333
334 static int idxd_init_evl(struct idxd_device *idxd)
335 {
336         struct device *dev = &idxd->pdev->dev;
337         struct idxd_evl *evl;
338
339         if (idxd->hw.gen_cap.evl_support == 0)
340                 return 0;
341
342         evl = kzalloc_node(sizeof(*evl), GFP_KERNEL, dev_to_node(dev));
343         if (!evl)
344                 return -ENOMEM;
345
346         spin_lock_init(&evl->lock);
347         evl->size = IDXD_EVL_SIZE_MIN;
348
349         idxd->evl_cache = kmem_cache_create(dev_name(idxd_confdev(idxd)),
350                                             sizeof(struct idxd_evl_fault) + evl_ent_size(idxd),
351                                             0, 0, NULL);
352         if (!idxd->evl_cache) {
353                 kfree(evl);
354                 return -ENOMEM;
355         }
356
357         idxd->evl = evl;
358         return 0;
359 }
360
361 static int idxd_setup_internals(struct idxd_device *idxd)
362 {
363         struct device *dev = &idxd->pdev->dev;
364         int rc, i;
365
366         init_waitqueue_head(&idxd->cmd_waitq);
367
368         rc = idxd_setup_wqs(idxd);
369         if (rc < 0)
370                 goto err_wqs;
371
372         rc = idxd_setup_engines(idxd);
373         if (rc < 0)
374                 goto err_engine;
375
376         rc = idxd_setup_groups(idxd);
377         if (rc < 0)
378                 goto err_group;
379
380         idxd->wq = create_workqueue(dev_name(dev));
381         if (!idxd->wq) {
382                 rc = -ENOMEM;
383                 goto err_wkq_create;
384         }
385
386         rc = idxd_init_evl(idxd);
387         if (rc < 0)
388                 goto err_evl;
389
390         return 0;
391
392  err_evl:
393         destroy_workqueue(idxd->wq);
394  err_wkq_create:
395         for (i = 0; i < idxd->max_groups; i++)
396                 put_device(group_confdev(idxd->groups[i]));
397  err_group:
398         for (i = 0; i < idxd->max_engines; i++)
399                 put_device(engine_confdev(idxd->engines[i]));
400  err_engine:
401         for (i = 0; i < idxd->max_wqs; i++)
402                 put_device(wq_confdev(idxd->wqs[i]));
403  err_wqs:
404         return rc;
405 }
406
407 static void idxd_read_table_offsets(struct idxd_device *idxd)
408 {
409         union offsets_reg offsets;
410         struct device *dev = &idxd->pdev->dev;
411
412         offsets.bits[0] = ioread64(idxd->reg_base + IDXD_TABLE_OFFSET);
413         offsets.bits[1] = ioread64(idxd->reg_base + IDXD_TABLE_OFFSET + sizeof(u64));
414         idxd->grpcfg_offset = offsets.grpcfg * IDXD_TABLE_MULT;
415         dev_dbg(dev, "IDXD Group Config Offset: %#x\n", idxd->grpcfg_offset);
416         idxd->wqcfg_offset = offsets.wqcfg * IDXD_TABLE_MULT;
417         dev_dbg(dev, "IDXD Work Queue Config Offset: %#x\n", idxd->wqcfg_offset);
418         idxd->msix_perm_offset = offsets.msix_perm * IDXD_TABLE_MULT;
419         dev_dbg(dev, "IDXD MSIX Permission Offset: %#x\n", idxd->msix_perm_offset);
420         idxd->perfmon_offset = offsets.perfmon * IDXD_TABLE_MULT;
421         dev_dbg(dev, "IDXD Perfmon Offset: %#x\n", idxd->perfmon_offset);
422 }
423
424 void multi_u64_to_bmap(unsigned long *bmap, u64 *val, int count)
425 {
426         int i, j, nr;
427
428         for (i = 0, nr = 0; i < count; i++) {
429                 for (j = 0; j < BITS_PER_LONG_LONG; j++) {
430                         if (val[i] & BIT(j))
431                                 set_bit(nr, bmap);
432                         nr++;
433                 }
434         }
435 }
436
437 static void idxd_read_caps(struct idxd_device *idxd)
438 {
439         struct device *dev = &idxd->pdev->dev;
440         int i;
441
442         /* reading generic capabilities */
443         idxd->hw.gen_cap.bits = ioread64(idxd->reg_base + IDXD_GENCAP_OFFSET);
444         dev_dbg(dev, "gen_cap: %#llx\n", idxd->hw.gen_cap.bits);
445
446         if (idxd->hw.gen_cap.cmd_cap) {
447                 idxd->hw.cmd_cap = ioread32(idxd->reg_base + IDXD_CMDCAP_OFFSET);
448                 dev_dbg(dev, "cmd_cap: %#x\n", idxd->hw.cmd_cap);
449         }
450
451         /* reading command capabilities */
452         if (idxd->hw.cmd_cap & BIT(IDXD_CMD_REQUEST_INT_HANDLE))
453                 idxd->request_int_handles = true;
454
455         idxd->max_xfer_bytes = 1ULL << idxd->hw.gen_cap.max_xfer_shift;
456         dev_dbg(dev, "max xfer size: %llu bytes\n", idxd->max_xfer_bytes);
457         idxd_set_max_batch_size(idxd->data->type, idxd, 1U << idxd->hw.gen_cap.max_batch_shift);
458         dev_dbg(dev, "max batch size: %u\n", idxd->max_batch_size);
459         if (idxd->hw.gen_cap.config_en)
460                 set_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags);
461
462         /* reading group capabilities */
463         idxd->hw.group_cap.bits =
464                 ioread64(idxd->reg_base + IDXD_GRPCAP_OFFSET);
465         dev_dbg(dev, "group_cap: %#llx\n", idxd->hw.group_cap.bits);
466         idxd->max_groups = idxd->hw.group_cap.num_groups;
467         dev_dbg(dev, "max groups: %u\n", idxd->max_groups);
468         idxd->max_rdbufs = idxd->hw.group_cap.total_rdbufs;
469         dev_dbg(dev, "max read buffers: %u\n", idxd->max_rdbufs);
470         idxd->nr_rdbufs = idxd->max_rdbufs;
471
472         /* read engine capabilities */
473         idxd->hw.engine_cap.bits =
474                 ioread64(idxd->reg_base + IDXD_ENGCAP_OFFSET);
475         dev_dbg(dev, "engine_cap: %#llx\n", idxd->hw.engine_cap.bits);
476         idxd->max_engines = idxd->hw.engine_cap.num_engines;
477         dev_dbg(dev, "max engines: %u\n", idxd->max_engines);
478
479         /* read workqueue capabilities */
480         idxd->hw.wq_cap.bits = ioread64(idxd->reg_base + IDXD_WQCAP_OFFSET);
481         dev_dbg(dev, "wq_cap: %#llx\n", idxd->hw.wq_cap.bits);
482         idxd->max_wq_size = idxd->hw.wq_cap.total_wq_size;
483         dev_dbg(dev, "total workqueue size: %u\n", idxd->max_wq_size);
484         idxd->max_wqs = idxd->hw.wq_cap.num_wqs;
485         dev_dbg(dev, "max workqueues: %u\n", idxd->max_wqs);
486         idxd->wqcfg_size = 1 << (idxd->hw.wq_cap.wqcfg_size + IDXD_WQCFG_MIN);
487         dev_dbg(dev, "wqcfg size: %u\n", idxd->wqcfg_size);
488
489         /* reading operation capabilities */
490         for (i = 0; i < 4; i++) {
491                 idxd->hw.opcap.bits[i] = ioread64(idxd->reg_base +
492                                 IDXD_OPCAP_OFFSET + i * sizeof(u64));
493                 dev_dbg(dev, "opcap[%d]: %#llx\n", i, idxd->hw.opcap.bits[i]);
494         }
495         multi_u64_to_bmap(idxd->opcap_bmap, &idxd->hw.opcap.bits[0], 4);
496
497         /* read iaa cap */
498         if (idxd->data->type == IDXD_TYPE_IAX && idxd->hw.version >= DEVICE_VERSION_2)
499                 idxd->hw.iaa_cap.bits = ioread64(idxd->reg_base + IDXD_IAACAP_OFFSET);
500 }
501
502 static struct idxd_device *idxd_alloc(struct pci_dev *pdev, struct idxd_driver_data *data)
503 {
504         struct device *dev = &pdev->dev;
505         struct device *conf_dev;
506         struct idxd_device *idxd;
507         int rc;
508
509         idxd = kzalloc_node(sizeof(*idxd), GFP_KERNEL, dev_to_node(dev));
510         if (!idxd)
511                 return NULL;
512
513         conf_dev = idxd_confdev(idxd);
514         idxd->pdev = pdev;
515         idxd->data = data;
516         idxd_dev_set_type(&idxd->idxd_dev, idxd->data->type);
517         idxd->id = ida_alloc(&idxd_ida, GFP_KERNEL);
518         if (idxd->id < 0)
519                 return NULL;
520
521         idxd->opcap_bmap = bitmap_zalloc_node(IDXD_MAX_OPCAP_BITS, GFP_KERNEL, dev_to_node(dev));
522         if (!idxd->opcap_bmap) {
523                 ida_free(&idxd_ida, idxd->id);
524                 return NULL;
525         }
526
527         device_initialize(conf_dev);
528         conf_dev->parent = dev;
529         conf_dev->bus = &dsa_bus_type;
530         conf_dev->type = idxd->data->dev_type;
531         rc = dev_set_name(conf_dev, "%s%d", idxd->data->name_prefix, idxd->id);
532         if (rc < 0) {
533                 put_device(conf_dev);
534                 return NULL;
535         }
536
537         spin_lock_init(&idxd->dev_lock);
538         spin_lock_init(&idxd->cmd_lock);
539
540         return idxd;
541 }
542
543 static int idxd_enable_system_pasid(struct idxd_device *idxd)
544 {
545         return -EOPNOTSUPP;
546 }
547
548 static void idxd_disable_system_pasid(struct idxd_device *idxd)
549 {
550
551         iommu_sva_unbind_device(idxd->sva);
552         idxd->sva = NULL;
553 }
554
555 static int idxd_probe(struct idxd_device *idxd)
556 {
557         struct pci_dev *pdev = idxd->pdev;
558         struct device *dev = &pdev->dev;
559         int rc;
560
561         dev_dbg(dev, "%s entered and resetting device\n", __func__);
562         rc = idxd_device_init_reset(idxd);
563         if (rc < 0)
564                 return rc;
565
566         dev_dbg(dev, "IDXD reset complete\n");
567
568         if (IS_ENABLED(CONFIG_INTEL_IDXD_SVM) && sva) {
569                 if (iommu_dev_enable_feature(dev, IOMMU_DEV_FEAT_SVA)) {
570                         dev_warn(dev, "Unable to turn on user SVA feature.\n");
571                 } else {
572                         set_bit(IDXD_FLAG_USER_PASID_ENABLED, &idxd->flags);
573
574                         if (idxd_enable_system_pasid(idxd))
575                                 dev_warn(dev, "No in-kernel DMA with PASID.\n");
576                         else
577                                 set_bit(IDXD_FLAG_PASID_ENABLED, &idxd->flags);
578                 }
579         } else if (!sva) {
580                 dev_warn(dev, "User forced SVA off via module param.\n");
581         }
582
583         idxd_read_caps(idxd);
584         idxd_read_table_offsets(idxd);
585
586         rc = idxd_setup_internals(idxd);
587         if (rc)
588                 goto err;
589
590         /* If the configs are readonly, then load them from device */
591         if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags)) {
592                 dev_dbg(dev, "Loading RO device config\n");
593                 rc = idxd_device_load_config(idxd);
594                 if (rc < 0)
595                         goto err_config;
596         }
597
598         rc = idxd_setup_interrupts(idxd);
599         if (rc)
600                 goto err_config;
601
602         idxd->major = idxd_cdev_get_major(idxd);
603
604         rc = perfmon_pmu_init(idxd);
605         if (rc < 0)
606                 dev_warn(dev, "Failed to initialize perfmon. No PMU support: %d\n", rc);
607
608         dev_dbg(dev, "IDXD device %d probed successfully\n", idxd->id);
609         return 0;
610
611  err_config:
612         idxd_cleanup_internals(idxd);
613  err:
614         if (device_pasid_enabled(idxd))
615                 idxd_disable_system_pasid(idxd);
616         if (device_user_pasid_enabled(idxd))
617                 iommu_dev_disable_feature(dev, IOMMU_DEV_FEAT_SVA);
618         return rc;
619 }
620
621 static void idxd_cleanup(struct idxd_device *idxd)
622 {
623         struct device *dev = &idxd->pdev->dev;
624
625         perfmon_pmu_remove(idxd);
626         idxd_cleanup_interrupts(idxd);
627         idxd_cleanup_internals(idxd);
628         if (device_pasid_enabled(idxd))
629                 idxd_disable_system_pasid(idxd);
630         if (device_user_pasid_enabled(idxd))
631                 iommu_dev_disable_feature(dev, IOMMU_DEV_FEAT_SVA);
632 }
633
634 static int idxd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
635 {
636         struct device *dev = &pdev->dev;
637         struct idxd_device *idxd;
638         struct idxd_driver_data *data = (struct idxd_driver_data *)id->driver_data;
639         int rc;
640
641         rc = pci_enable_device(pdev);
642         if (rc)
643                 return rc;
644
645         dev_dbg(dev, "Alloc IDXD context\n");
646         idxd = idxd_alloc(pdev, data);
647         if (!idxd) {
648                 rc = -ENOMEM;
649                 goto err_idxd_alloc;
650         }
651
652         dev_dbg(dev, "Mapping BARs\n");
653         idxd->reg_base = pci_iomap(pdev, IDXD_MMIO_BAR, 0);
654         if (!idxd->reg_base) {
655                 rc = -ENOMEM;
656                 goto err_iomap;
657         }
658
659         dev_dbg(dev, "Set DMA masks\n");
660         rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
661         if (rc)
662                 goto err;
663
664         dev_dbg(dev, "Set PCI master\n");
665         pci_set_master(pdev);
666         pci_set_drvdata(pdev, idxd);
667
668         idxd->hw.version = ioread32(idxd->reg_base + IDXD_VER_OFFSET);
669         rc = idxd_probe(idxd);
670         if (rc) {
671                 dev_err(dev, "Intel(R) IDXD DMA Engine init failed\n");
672                 goto err;
673         }
674
675         rc = idxd_register_devices(idxd);
676         if (rc) {
677                 dev_err(dev, "IDXD sysfs setup failed\n");
678                 goto err_dev_register;
679         }
680
681         rc = idxd_device_init_debugfs(idxd);
682         if (rc)
683                 dev_warn(dev, "IDXD debugfs failed to setup\n");
684
685         dev_info(&pdev->dev, "Intel(R) Accelerator Device (v%x)\n",
686                  idxd->hw.version);
687
688         return 0;
689
690  err_dev_register:
691         idxd_cleanup(idxd);
692  err:
693         pci_iounmap(pdev, idxd->reg_base);
694  err_iomap:
695         put_device(idxd_confdev(idxd));
696  err_idxd_alloc:
697         pci_disable_device(pdev);
698         return rc;
699 }
700
701 void idxd_wqs_quiesce(struct idxd_device *idxd)
702 {
703         struct idxd_wq *wq;
704         int i;
705
706         for (i = 0; i < idxd->max_wqs; i++) {
707                 wq = idxd->wqs[i];
708                 if (wq->state == IDXD_WQ_ENABLED && wq->type == IDXD_WQT_KERNEL)
709                         idxd_wq_quiesce(wq);
710         }
711 }
712
713 static void idxd_shutdown(struct pci_dev *pdev)
714 {
715         struct idxd_device *idxd = pci_get_drvdata(pdev);
716         struct idxd_irq_entry *irq_entry;
717         int rc;
718
719         rc = idxd_device_disable(idxd);
720         if (rc)
721                 dev_err(&pdev->dev, "Disabling device failed\n");
722
723         irq_entry = &idxd->ie;
724         synchronize_irq(irq_entry->vector);
725         idxd_mask_error_interrupts(idxd);
726         flush_workqueue(idxd->wq);
727 }
728
729 static void idxd_remove(struct pci_dev *pdev)
730 {
731         struct idxd_device *idxd = pci_get_drvdata(pdev);
732         struct idxd_irq_entry *irq_entry;
733
734         idxd_unregister_devices(idxd);
735         /*
736          * When ->release() is called for the idxd->conf_dev, it frees all the memory related
737          * to the idxd context. The driver still needs those bits in order to do the rest of
738          * the cleanup. However, we do need to unbound the idxd sub-driver. So take a ref
739          * on the device here to hold off the freeing while allowing the idxd sub-driver
740          * to unbind.
741          */
742         get_device(idxd_confdev(idxd));
743         device_unregister(idxd_confdev(idxd));
744         idxd_shutdown(pdev);
745         if (device_pasid_enabled(idxd))
746                 idxd_disable_system_pasid(idxd);
747         idxd_device_remove_debugfs(idxd);
748
749         irq_entry = idxd_get_ie(idxd, 0);
750         free_irq(irq_entry->vector, irq_entry);
751         pci_free_irq_vectors(pdev);
752         pci_iounmap(pdev, idxd->reg_base);
753         if (device_user_pasid_enabled(idxd))
754                 iommu_dev_disable_feature(&pdev->dev, IOMMU_DEV_FEAT_SVA);
755         pci_disable_device(pdev);
756         destroy_workqueue(idxd->wq);
757         perfmon_pmu_remove(idxd);
758         put_device(idxd_confdev(idxd));
759 }
760
761 static struct pci_driver idxd_pci_driver = {
762         .name           = DRV_NAME,
763         .id_table       = idxd_pci_tbl,
764         .probe          = idxd_pci_probe,
765         .remove         = idxd_remove,
766         .shutdown       = idxd_shutdown,
767 };
768
769 static int __init idxd_init_module(void)
770 {
771         int err;
772
773         /*
774          * If the CPU does not support MOVDIR64B or ENQCMDS, there's no point in
775          * enumerating the device. We can not utilize it.
776          */
777         if (!cpu_feature_enabled(X86_FEATURE_MOVDIR64B)) {
778                 pr_warn("idxd driver failed to load without MOVDIR64B.\n");
779                 return -ENODEV;
780         }
781
782         if (!cpu_feature_enabled(X86_FEATURE_ENQCMD))
783                 pr_warn("Platform does not have ENQCMD(S) support.\n");
784         else
785                 support_enqcmd = true;
786
787         perfmon_init();
788
789         err = idxd_driver_register(&idxd_drv);
790         if (err < 0)
791                 goto err_idxd_driver_register;
792
793         err = idxd_driver_register(&idxd_dmaengine_drv);
794         if (err < 0)
795                 goto err_idxd_dmaengine_driver_register;
796
797         err = idxd_driver_register(&idxd_user_drv);
798         if (err < 0)
799                 goto err_idxd_user_driver_register;
800
801         err = idxd_cdev_register();
802         if (err)
803                 goto err_cdev_register;
804
805         err = idxd_init_debugfs();
806         if (err)
807                 goto err_debugfs;
808
809         err = pci_register_driver(&idxd_pci_driver);
810         if (err)
811                 goto err_pci_register;
812
813         return 0;
814
815 err_pci_register:
816         idxd_remove_debugfs();
817 err_debugfs:
818         idxd_cdev_remove();
819 err_cdev_register:
820         idxd_driver_unregister(&idxd_user_drv);
821 err_idxd_user_driver_register:
822         idxd_driver_unregister(&idxd_dmaengine_drv);
823 err_idxd_dmaengine_driver_register:
824         idxd_driver_unregister(&idxd_drv);
825 err_idxd_driver_register:
826         return err;
827 }
828 module_init(idxd_init_module);
829
830 static void __exit idxd_exit_module(void)
831 {
832         idxd_driver_unregister(&idxd_user_drv);
833         idxd_driver_unregister(&idxd_dmaengine_drv);
834         idxd_driver_unregister(&idxd_drv);
835         pci_unregister_driver(&idxd_pci_driver);
836         idxd_cdev_remove();
837         perfmon_exit();
838         idxd_remove_debugfs();
839 }
840 module_exit(idxd_exit_module);