GNU Linux-libre 6.8.9-gnu
[releases.git] / drivers / ntb / hw / epf / ntb_hw_epf.c
1 // SPDX-License-Identifier: GPL-2.0
2 /**
3  * Host side endpoint driver to implement Non-Transparent Bridge functionality
4  *
5  * Copyright (C) 2020 Texas Instruments
6  * Author: Kishon Vijay Abraham I <kishon@ti.com>
7  */
8
9 #include <linux/delay.h>
10 #include <linux/module.h>
11 #include <linux/pci.h>
12 #include <linux/slab.h>
13 #include <linux/ntb.h>
14
15 #define NTB_EPF_COMMAND         0x0
16 #define CMD_CONFIGURE_DOORBELL  1
17 #define CMD_TEARDOWN_DOORBELL   2
18 #define CMD_CONFIGURE_MW        3
19 #define CMD_TEARDOWN_MW         4
20 #define CMD_LINK_UP             5
21 #define CMD_LINK_DOWN           6
22
23 #define NTB_EPF_ARGUMENT        0x4
24 #define MSIX_ENABLE             BIT(16)
25
26 #define NTB_EPF_CMD_STATUS      0x8
27 #define COMMAND_STATUS_OK       1
28 #define COMMAND_STATUS_ERROR    2
29
30 #define NTB_EPF_LINK_STATUS     0x0A
31 #define LINK_STATUS_UP          BIT(0)
32
33 #define NTB_EPF_TOPOLOGY        0x0C
34 #define NTB_EPF_LOWER_ADDR      0x10
35 #define NTB_EPF_UPPER_ADDR      0x14
36 #define NTB_EPF_LOWER_SIZE      0x18
37 #define NTB_EPF_UPPER_SIZE      0x1C
38 #define NTB_EPF_MW_COUNT        0x20
39 #define NTB_EPF_MW1_OFFSET      0x24
40 #define NTB_EPF_SPAD_OFFSET     0x28
41 #define NTB_EPF_SPAD_COUNT      0x2C
42 #define NTB_EPF_DB_ENTRY_SIZE   0x30
43 #define NTB_EPF_DB_DATA(n)      (0x34 + (n) * 4)
44 #define NTB_EPF_DB_OFFSET(n)    (0xB4 + (n) * 4)
45
46 #define NTB_EPF_MIN_DB_COUNT    3
47 #define NTB_EPF_MAX_DB_COUNT    31
48
49 #define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */
50
51 enum pci_barno {
52         BAR_0,
53         BAR_1,
54         BAR_2,
55         BAR_3,
56         BAR_4,
57         BAR_5,
58 };
59
60 struct ntb_epf_dev {
61         struct ntb_dev ntb;
62         struct device *dev;
63         /* Mutex to protect providing commands to NTB EPF */
64         struct mutex cmd_lock;
65
66         enum pci_barno ctrl_reg_bar;
67         enum pci_barno peer_spad_reg_bar;
68         enum pci_barno db_reg_bar;
69         enum pci_barno mw_bar;
70
71         unsigned int mw_count;
72         unsigned int spad_count;
73         unsigned int db_count;
74
75         void __iomem *ctrl_reg;
76         void __iomem *db_reg;
77         void __iomem *peer_spad_reg;
78
79         unsigned int self_spad;
80         unsigned int peer_spad;
81
82         int db_val;
83         u64 db_valid_mask;
84 };
85
86 #define ntb_ndev(__ntb) container_of(__ntb, struct ntb_epf_dev, ntb)
87
88 struct ntb_epf_data {
89         /* BAR that contains both control region and self spad region */
90         enum pci_barno ctrl_reg_bar;
91         /* BAR that contains peer spad region */
92         enum pci_barno peer_spad_reg_bar;
93         /* BAR that contains Doorbell region and Memory window '1' */
94         enum pci_barno db_reg_bar;
95         /* BAR that contains memory windows*/
96         enum pci_barno mw_bar;
97 };
98
99 static int ntb_epf_send_command(struct ntb_epf_dev *ndev, u32 command,
100                                 u32 argument)
101 {
102         ktime_t timeout;
103         bool timedout;
104         int ret = 0;
105         u32 status;
106
107         mutex_lock(&ndev->cmd_lock);
108         writel(argument, ndev->ctrl_reg + NTB_EPF_ARGUMENT);
109         writel(command, ndev->ctrl_reg + NTB_EPF_COMMAND);
110
111         timeout = ktime_add_ms(ktime_get(), NTB_EPF_COMMAND_TIMEOUT);
112         while (1) {
113                 timedout = ktime_after(ktime_get(), timeout);
114                 status = readw(ndev->ctrl_reg + NTB_EPF_CMD_STATUS);
115
116                 if (status == COMMAND_STATUS_ERROR) {
117                         ret = -EINVAL;
118                         break;
119                 }
120
121                 if (status == COMMAND_STATUS_OK)
122                         break;
123
124                 if (WARN_ON(timedout)) {
125                         ret = -ETIMEDOUT;
126                         break;
127                 }
128
129                 usleep_range(5, 10);
130         }
131
132         writew(0, ndev->ctrl_reg + NTB_EPF_CMD_STATUS);
133         mutex_unlock(&ndev->cmd_lock);
134
135         return ret;
136 }
137
138 static int ntb_epf_mw_to_bar(struct ntb_epf_dev *ndev, int idx)
139 {
140         struct device *dev = ndev->dev;
141
142         if (idx < 0 || idx > ndev->mw_count) {
143                 dev_err(dev, "Unsupported Memory Window index %d\n", idx);
144                 return -EINVAL;
145         }
146
147         return idx + 2;
148 }
149
150 static int ntb_epf_mw_count(struct ntb_dev *ntb, int pidx)
151 {
152         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
153         struct device *dev = ndev->dev;
154
155         if (pidx != NTB_DEF_PEER_IDX) {
156                 dev_err(dev, "Unsupported Peer ID %d\n", pidx);
157                 return -EINVAL;
158         }
159
160         return ndev->mw_count;
161 }
162
163 static int ntb_epf_mw_get_align(struct ntb_dev *ntb, int pidx, int idx,
164                                 resource_size_t *addr_align,
165                                 resource_size_t *size_align,
166                                 resource_size_t *size_max)
167 {
168         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
169         struct device *dev = ndev->dev;
170         int bar;
171
172         if (pidx != NTB_DEF_PEER_IDX) {
173                 dev_err(dev, "Unsupported Peer ID %d\n", pidx);
174                 return -EINVAL;
175         }
176
177         bar = ntb_epf_mw_to_bar(ndev, idx);
178         if (bar < 0)
179                 return bar;
180
181         if (addr_align)
182                 *addr_align = SZ_4K;
183
184         if (size_align)
185                 *size_align = 1;
186
187         if (size_max)
188                 *size_max = pci_resource_len(ndev->ntb.pdev, bar);
189
190         return 0;
191 }
192
193 static u64 ntb_epf_link_is_up(struct ntb_dev *ntb,
194                               enum ntb_speed *speed,
195                               enum ntb_width *width)
196 {
197         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
198         u32 status;
199
200         status = readw(ndev->ctrl_reg + NTB_EPF_LINK_STATUS);
201
202         return status & LINK_STATUS_UP;
203 }
204
205 static u32 ntb_epf_spad_read(struct ntb_dev *ntb, int idx)
206 {
207         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
208         struct device *dev = ndev->dev;
209         u32 offset;
210
211         if (idx < 0 || idx >= ndev->spad_count) {
212                 dev_err(dev, "READ: Invalid ScratchPad Index %d\n", idx);
213                 return 0;
214         }
215
216         offset = readl(ndev->ctrl_reg + NTB_EPF_SPAD_OFFSET);
217         offset += (idx << 2);
218
219         return readl(ndev->ctrl_reg + offset);
220 }
221
222 static int ntb_epf_spad_write(struct ntb_dev *ntb,
223                               int idx, u32 val)
224 {
225         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
226         struct device *dev = ndev->dev;
227         u32 offset;
228
229         if (idx < 0 || idx >= ndev->spad_count) {
230                 dev_err(dev, "WRITE: Invalid ScratchPad Index %d\n", idx);
231                 return -EINVAL;
232         }
233
234         offset = readl(ndev->ctrl_reg + NTB_EPF_SPAD_OFFSET);
235         offset += (idx << 2);
236         writel(val, ndev->ctrl_reg + offset);
237
238         return 0;
239 }
240
241 static u32 ntb_epf_peer_spad_read(struct ntb_dev *ntb, int pidx, int idx)
242 {
243         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
244         struct device *dev = ndev->dev;
245         u32 offset;
246
247         if (pidx != NTB_DEF_PEER_IDX) {
248                 dev_err(dev, "Unsupported Peer ID %d\n", pidx);
249                 return -EINVAL;
250         }
251
252         if (idx < 0 || idx >= ndev->spad_count) {
253                 dev_err(dev, "WRITE: Invalid Peer ScratchPad Index %d\n", idx);
254                 return -EINVAL;
255         }
256
257         offset = (idx << 2);
258         return readl(ndev->peer_spad_reg + offset);
259 }
260
261 static int ntb_epf_peer_spad_write(struct ntb_dev *ntb, int pidx,
262                                    int idx, u32 val)
263 {
264         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
265         struct device *dev = ndev->dev;
266         u32 offset;
267
268         if (pidx != NTB_DEF_PEER_IDX) {
269                 dev_err(dev, "Unsupported Peer ID %d\n", pidx);
270                 return -EINVAL;
271         }
272
273         if (idx < 0 || idx >= ndev->spad_count) {
274                 dev_err(dev, "WRITE: Invalid Peer ScratchPad Index %d\n", idx);
275                 return -EINVAL;
276         }
277
278         offset = (idx << 2);
279         writel(val, ndev->peer_spad_reg + offset);
280
281         return 0;
282 }
283
284 static int ntb_epf_link_enable(struct ntb_dev *ntb,
285                                enum ntb_speed max_speed,
286                                enum ntb_width max_width)
287 {
288         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
289         struct device *dev = ndev->dev;
290         int ret;
291
292         ret = ntb_epf_send_command(ndev, CMD_LINK_UP, 0);
293         if (ret) {
294                 dev_err(dev, "Fail to enable link\n");
295                 return ret;
296         }
297
298         return 0;
299 }
300
301 static int ntb_epf_link_disable(struct ntb_dev *ntb)
302 {
303         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
304         struct device *dev = ndev->dev;
305         int ret;
306
307         ret = ntb_epf_send_command(ndev, CMD_LINK_DOWN, 0);
308         if (ret) {
309                 dev_err(dev, "Fail to disable link\n");
310                 return ret;
311         }
312
313         return 0;
314 }
315
316 static irqreturn_t ntb_epf_vec_isr(int irq, void *dev)
317 {
318         struct ntb_epf_dev *ndev = dev;
319         int irq_no;
320
321         irq_no = irq - pci_irq_vector(ndev->ntb.pdev, 0);
322         ndev->db_val = irq_no + 1;
323
324         if (irq_no == 0)
325                 ntb_link_event(&ndev->ntb);
326         else
327                 ntb_db_event(&ndev->ntb, irq_no);
328
329         return IRQ_HANDLED;
330 }
331
332 static int ntb_epf_init_isr(struct ntb_epf_dev *ndev, int msi_min, int msi_max)
333 {
334         struct pci_dev *pdev = ndev->ntb.pdev;
335         struct device *dev = ndev->dev;
336         u32 argument = MSIX_ENABLE;
337         int irq;
338         int ret;
339         int i;
340
341         irq = pci_alloc_irq_vectors(pdev, msi_min, msi_max, PCI_IRQ_MSIX);
342         if (irq < 0) {
343                 dev_dbg(dev, "Failed to get MSIX interrupts\n");
344                 irq = pci_alloc_irq_vectors(pdev, msi_min, msi_max,
345                                             PCI_IRQ_MSI);
346                 if (irq < 0) {
347                         dev_err(dev, "Failed to get MSI interrupts\n");
348                         return irq;
349                 }
350                 argument &= ~MSIX_ENABLE;
351         }
352
353         for (i = 0; i < irq; i++) {
354                 ret = request_irq(pci_irq_vector(pdev, i), ntb_epf_vec_isr,
355                                   0, "ntb_epf", ndev);
356                 if (ret) {
357                         dev_err(dev, "Failed to request irq\n");
358                         goto err_request_irq;
359                 }
360         }
361
362         ndev->db_count = irq - 1;
363
364         ret = ntb_epf_send_command(ndev, CMD_CONFIGURE_DOORBELL,
365                                    argument | irq);
366         if (ret) {
367                 dev_err(dev, "Failed to configure doorbell\n");
368                 goto err_configure_db;
369         }
370
371         return 0;
372
373 err_configure_db:
374         for (i = 0; i < ndev->db_count + 1; i++)
375                 free_irq(pci_irq_vector(pdev, i), ndev);
376
377 err_request_irq:
378         pci_free_irq_vectors(pdev);
379
380         return ret;
381 }
382
383 static int ntb_epf_peer_mw_count(struct ntb_dev *ntb)
384 {
385         return ntb_ndev(ntb)->mw_count;
386 }
387
388 static int ntb_epf_spad_count(struct ntb_dev *ntb)
389 {
390         return ntb_ndev(ntb)->spad_count;
391 }
392
393 static u64 ntb_epf_db_valid_mask(struct ntb_dev *ntb)
394 {
395         return ntb_ndev(ntb)->db_valid_mask;
396 }
397
398 static int ntb_epf_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
399 {
400         return 0;
401 }
402
403 static int ntb_epf_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx,
404                                 dma_addr_t addr, resource_size_t size)
405 {
406         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
407         struct device *dev = ndev->dev;
408         resource_size_t mw_size;
409         int bar;
410
411         if (pidx != NTB_DEF_PEER_IDX) {
412                 dev_err(dev, "Unsupported Peer ID %d\n", pidx);
413                 return -EINVAL;
414         }
415
416         bar = idx + ndev->mw_bar;
417
418         mw_size = pci_resource_len(ntb->pdev, bar);
419
420         if (size > mw_size) {
421                 dev_err(dev, "Size:%pa is greater than the MW size %pa\n",
422                         &size, &mw_size);
423                 return -EINVAL;
424         }
425
426         writel(lower_32_bits(addr), ndev->ctrl_reg + NTB_EPF_LOWER_ADDR);
427         writel(upper_32_bits(addr), ndev->ctrl_reg + NTB_EPF_UPPER_ADDR);
428         writel(lower_32_bits(size), ndev->ctrl_reg + NTB_EPF_LOWER_SIZE);
429         writel(upper_32_bits(size), ndev->ctrl_reg + NTB_EPF_UPPER_SIZE);
430         ntb_epf_send_command(ndev, CMD_CONFIGURE_MW, idx);
431
432         return 0;
433 }
434
435 static int ntb_epf_mw_clear_trans(struct ntb_dev *ntb, int pidx, int idx)
436 {
437         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
438         struct device *dev = ndev->dev;
439         int ret = 0;
440
441         ntb_epf_send_command(ndev, CMD_TEARDOWN_MW, idx);
442         if (ret)
443                 dev_err(dev, "Failed to teardown memory window\n");
444
445         return ret;
446 }
447
448 static int ntb_epf_peer_mw_get_addr(struct ntb_dev *ntb, int idx,
449                                     phys_addr_t *base, resource_size_t *size)
450 {
451         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
452         u32 offset = 0;
453         int bar;
454
455         if (idx == 0)
456                 offset = readl(ndev->ctrl_reg + NTB_EPF_MW1_OFFSET);
457
458         bar = idx + ndev->mw_bar;
459
460         if (base)
461                 *base = pci_resource_start(ndev->ntb.pdev, bar) + offset;
462
463         if (size)
464                 *size = pci_resource_len(ndev->ntb.pdev, bar) - offset;
465
466         return 0;
467 }
468
469 static int ntb_epf_peer_db_set(struct ntb_dev *ntb, u64 db_bits)
470 {
471         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
472         u32 interrupt_num = ffs(db_bits) + 1;
473         struct device *dev = ndev->dev;
474         u32 db_entry_size;
475         u32 db_offset;
476         u32 db_data;
477
478         if (interrupt_num > ndev->db_count) {
479                 dev_err(dev, "DB interrupt %d greater than Max Supported %d\n",
480                         interrupt_num, ndev->db_count);
481                 return -EINVAL;
482         }
483
484         db_entry_size = readl(ndev->ctrl_reg + NTB_EPF_DB_ENTRY_SIZE);
485
486         db_data = readl(ndev->ctrl_reg + NTB_EPF_DB_DATA(interrupt_num));
487         db_offset = readl(ndev->ctrl_reg + NTB_EPF_DB_OFFSET(interrupt_num));
488         writel(db_data, ndev->db_reg + (db_entry_size * interrupt_num) +
489                db_offset);
490
491         return 0;
492 }
493
494 static u64 ntb_epf_db_read(struct ntb_dev *ntb)
495 {
496         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
497
498         return ndev->db_val;
499 }
500
501 static int ntb_epf_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
502 {
503         return 0;
504 }
505
506 static int ntb_epf_db_clear(struct ntb_dev *ntb, u64 db_bits)
507 {
508         struct ntb_epf_dev *ndev = ntb_ndev(ntb);
509
510         ndev->db_val = 0;
511
512         return 0;
513 }
514
515 static const struct ntb_dev_ops ntb_epf_ops = {
516         .mw_count               = ntb_epf_mw_count,
517         .spad_count             = ntb_epf_spad_count,
518         .peer_mw_count          = ntb_epf_peer_mw_count,
519         .db_valid_mask          = ntb_epf_db_valid_mask,
520         .db_set_mask            = ntb_epf_db_set_mask,
521         .mw_set_trans           = ntb_epf_mw_set_trans,
522         .mw_clear_trans         = ntb_epf_mw_clear_trans,
523         .peer_mw_get_addr       = ntb_epf_peer_mw_get_addr,
524         .link_enable            = ntb_epf_link_enable,
525         .spad_read              = ntb_epf_spad_read,
526         .spad_write             = ntb_epf_spad_write,
527         .peer_spad_read         = ntb_epf_peer_spad_read,
528         .peer_spad_write        = ntb_epf_peer_spad_write,
529         .peer_db_set            = ntb_epf_peer_db_set,
530         .db_read                = ntb_epf_db_read,
531         .mw_get_align           = ntb_epf_mw_get_align,
532         .link_is_up             = ntb_epf_link_is_up,
533         .db_clear_mask          = ntb_epf_db_clear_mask,
534         .db_clear               = ntb_epf_db_clear,
535         .link_disable           = ntb_epf_link_disable,
536 };
537
538 static inline void ntb_epf_init_struct(struct ntb_epf_dev *ndev,
539                                        struct pci_dev *pdev)
540 {
541         ndev->ntb.pdev = pdev;
542         ndev->ntb.topo = NTB_TOPO_NONE;
543         ndev->ntb.ops = &ntb_epf_ops;
544 }
545
546 static int ntb_epf_init_dev(struct ntb_epf_dev *ndev)
547 {
548         struct device *dev = ndev->dev;
549         int ret;
550
551         /* One Link interrupt and rest doorbell interrupt */
552         ret = ntb_epf_init_isr(ndev, NTB_EPF_MIN_DB_COUNT + 1,
553                                NTB_EPF_MAX_DB_COUNT + 1);
554         if (ret) {
555                 dev_err(dev, "Failed to init ISR\n");
556                 return ret;
557         }
558
559         ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
560         ndev->mw_count = readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT);
561         ndev->spad_count = readl(ndev->ctrl_reg + NTB_EPF_SPAD_COUNT);
562
563         return 0;
564 }
565
566 static int ntb_epf_init_pci(struct ntb_epf_dev *ndev,
567                             struct pci_dev *pdev)
568 {
569         struct device *dev = ndev->dev;
570         size_t spad_sz, spad_off;
571         int ret;
572
573         pci_set_drvdata(pdev, ndev);
574
575         ret = pci_enable_device(pdev);
576         if (ret) {
577                 dev_err(dev, "Cannot enable PCI device\n");
578                 goto err_pci_enable;
579         }
580
581         ret = pci_request_regions(pdev, "ntb");
582         if (ret) {
583                 dev_err(dev, "Cannot obtain PCI resources\n");
584                 goto err_pci_regions;
585         }
586
587         pci_set_master(pdev);
588
589         ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
590         if (ret) {
591                 ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
592                 if (ret) {
593                         dev_err(dev, "Cannot set DMA mask\n");
594                         goto err_pci_regions;
595                 }
596                 dev_warn(&pdev->dev, "Cannot DMA highmem\n");
597         }
598
599         ndev->ctrl_reg = pci_iomap(pdev, ndev->ctrl_reg_bar, 0);
600         if (!ndev->ctrl_reg) {
601                 ret = -EIO;
602                 goto err_pci_regions;
603         }
604
605         if (ndev->peer_spad_reg_bar) {
606                 ndev->peer_spad_reg = pci_iomap(pdev, ndev->peer_spad_reg_bar, 0);
607                 if (!ndev->peer_spad_reg) {
608                         ret = -EIO;
609                         goto err_pci_regions;
610                 }
611         } else {
612                 spad_sz = 4 * readl(ndev->ctrl_reg + NTB_EPF_SPAD_COUNT);
613                 spad_off = readl(ndev->ctrl_reg + NTB_EPF_SPAD_OFFSET);
614                 ndev->peer_spad_reg = ndev->ctrl_reg + spad_off  + spad_sz;
615         }
616
617         ndev->db_reg = pci_iomap(pdev, ndev->db_reg_bar, 0);
618         if (!ndev->db_reg) {
619                 ret = -EIO;
620                 goto err_pci_regions;
621         }
622
623         return 0;
624
625 err_pci_regions:
626         pci_disable_device(pdev);
627
628 err_pci_enable:
629         pci_set_drvdata(pdev, NULL);
630
631         return ret;
632 }
633
634 static void ntb_epf_deinit_pci(struct ntb_epf_dev *ndev)
635 {
636         struct pci_dev *pdev = ndev->ntb.pdev;
637
638         pci_iounmap(pdev, ndev->ctrl_reg);
639         pci_iounmap(pdev, ndev->peer_spad_reg);
640         pci_iounmap(pdev, ndev->db_reg);
641
642         pci_release_regions(pdev);
643         pci_disable_device(pdev);
644         pci_set_drvdata(pdev, NULL);
645 }
646
647 static void ntb_epf_cleanup_isr(struct ntb_epf_dev *ndev)
648 {
649         struct pci_dev *pdev = ndev->ntb.pdev;
650         int i;
651
652         ntb_epf_send_command(ndev, CMD_TEARDOWN_DOORBELL, ndev->db_count + 1);
653
654         for (i = 0; i < ndev->db_count + 1; i++)
655                 free_irq(pci_irq_vector(pdev, i), ndev);
656         pci_free_irq_vectors(pdev);
657 }
658
659 static int ntb_epf_pci_probe(struct pci_dev *pdev,
660                              const struct pci_device_id *id)
661 {
662         enum pci_barno peer_spad_reg_bar = BAR_1;
663         enum pci_barno ctrl_reg_bar = BAR_0;
664         enum pci_barno db_reg_bar = BAR_2;
665         enum pci_barno mw_bar = BAR_2;
666         struct device *dev = &pdev->dev;
667         struct ntb_epf_data *data;
668         struct ntb_epf_dev *ndev;
669         int ret;
670
671         if (pci_is_bridge(pdev))
672                 return -ENODEV;
673
674         ndev = devm_kzalloc(dev, sizeof(*ndev), GFP_KERNEL);
675         if (!ndev)
676                 return -ENOMEM;
677
678         data = (struct ntb_epf_data *)id->driver_data;
679         if (data) {
680                 peer_spad_reg_bar = data->peer_spad_reg_bar;
681                 ctrl_reg_bar = data->ctrl_reg_bar;
682                 db_reg_bar = data->db_reg_bar;
683                 mw_bar = data->mw_bar;
684         }
685
686         ndev->peer_spad_reg_bar = peer_spad_reg_bar;
687         ndev->ctrl_reg_bar = ctrl_reg_bar;
688         ndev->db_reg_bar = db_reg_bar;
689         ndev->mw_bar = mw_bar;
690         ndev->dev = dev;
691
692         ntb_epf_init_struct(ndev, pdev);
693         mutex_init(&ndev->cmd_lock);
694
695         ret = ntb_epf_init_pci(ndev, pdev);
696         if (ret) {
697                 dev_err(dev, "Failed to init PCI\n");
698                 return ret;
699         }
700
701         ret = ntb_epf_init_dev(ndev);
702         if (ret) {
703                 dev_err(dev, "Failed to init device\n");
704                 goto err_init_dev;
705         }
706
707         ret = ntb_register_device(&ndev->ntb);
708         if (ret) {
709                 dev_err(dev, "Failed to register NTB device\n");
710                 goto err_register_dev;
711         }
712
713         return 0;
714
715 err_register_dev:
716         ntb_epf_cleanup_isr(ndev);
717
718 err_init_dev:
719         ntb_epf_deinit_pci(ndev);
720
721         return ret;
722 }
723
724 static void ntb_epf_pci_remove(struct pci_dev *pdev)
725 {
726         struct ntb_epf_dev *ndev = pci_get_drvdata(pdev);
727
728         ntb_unregister_device(&ndev->ntb);
729         ntb_epf_cleanup_isr(ndev);
730         ntb_epf_deinit_pci(ndev);
731 }
732
733 static const struct ntb_epf_data j721e_data = {
734         .ctrl_reg_bar = BAR_0,
735         .peer_spad_reg_bar = BAR_1,
736         .db_reg_bar = BAR_2,
737         .mw_bar = BAR_2,
738 };
739
740 static const struct ntb_epf_data mx8_data = {
741         .ctrl_reg_bar = BAR_0,
742         .peer_spad_reg_bar = BAR_0,
743         .db_reg_bar = BAR_2,
744         .mw_bar = BAR_4,
745 };
746
747 static const struct pci_device_id ntb_epf_pci_tbl[] = {
748         {
749                 PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E),
750                 .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
751                 .driver_data = (kernel_ulong_t)&j721e_data,
752         },
753         {
754                 PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809),
755                 .class = PCI_CLASS_MEMORY_RAM << 8, .class_mask = 0xffff00,
756                 .driver_data = (kernel_ulong_t)&mx8_data,
757         },
758         { },
759 };
760
761 static struct pci_driver ntb_epf_pci_driver = {
762         .name           = KBUILD_MODNAME,
763         .id_table       = ntb_epf_pci_tbl,
764         .probe          = ntb_epf_pci_probe,
765         .remove         = ntb_epf_pci_remove,
766 };
767 module_pci_driver(ntb_epf_pci_driver);
768
769 MODULE_DESCRIPTION("PCI ENDPOINT NTB HOST DRIVER");
770 MODULE_AUTHOR("Kishon Vijay Abraham I <kishon@ti.com>");
771 MODULE_LICENSE("GPL v2");