xref: /openbmc/linux/drivers/ntb/hw/intel/ntb_hw_gen1.c (revision f79e4d5f)
1 /*
2  * This file is provided under a dual BSD/GPLv2 license.  When using or
3  *   redistributing this file, you may do so under either license.
4  *
5  *   GPL LICENSE SUMMARY
6  *
7  *   Copyright(c) 2012 Intel Corporation. All rights reserved.
8  *   Copyright (C) 2015 EMC Corporation. All Rights Reserved.
9  *   Copyright (C) 2016 T-Platforms. All Rights Reserved.
10  *
11  *   This program is free software; you can redistribute it and/or modify
12  *   it under the terms of version 2 of the GNU General Public License as
13  *   published by the Free Software Foundation.
14  *
15  *   BSD LICENSE
16  *
17  *   Copyright(c) 2012 Intel Corporation. All rights reserved.
18  *   Copyright (C) 2015 EMC Corporation. All Rights Reserved.
19  *   Copyright (C) 2016 T-Platforms. All Rights Reserved.
20  *
21  *   Redistribution and use in source and binary forms, with or without
22  *   modification, are permitted provided that the following conditions
23  *   are met:
24  *
25  *     * Redistributions of source code must retain the above copyright
26  *       notice, this list of conditions and the following disclaimer.
27  *     * Redistributions in binary form must reproduce the above copy
28  *       notice, this list of conditions and the following disclaimer in
29  *       the documentation and/or other materials provided with the
30  *       distribution.
31  *     * Neither the name of Intel Corporation nor the names of its
32  *       contributors may be used to endorse or promote products derived
33  *       from this software without specific prior written permission.
34  *
35  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46  *
47  * Intel PCIe NTB Linux driver
48  */
49 
50 #include <linux/debugfs.h>
51 #include <linux/delay.h>
52 #include <linux/init.h>
53 #include <linux/interrupt.h>
54 #include <linux/module.h>
55 #include <linux/pci.h>
56 #include <linux/random.h>
57 #include <linux/slab.h>
58 #include <linux/ntb.h>
59 
60 #include "ntb_hw_intel.h"
61 #include "ntb_hw_gen1.h"
62 #include "ntb_hw_gen3.h"
63 
64 #define NTB_NAME	"ntb_hw_intel"
65 #define NTB_DESC	"Intel(R) PCI-E Non-Transparent Bridge Driver"
66 #define NTB_VER		"2.0"
67 
68 MODULE_DESCRIPTION(NTB_DESC);
69 MODULE_VERSION(NTB_VER);
70 MODULE_LICENSE("Dual BSD/GPL");
71 MODULE_AUTHOR("Intel Corporation");
72 
73 #define bar0_off(base, bar) ((base) + ((bar) << 2))
74 #define bar2_off(base, bar) bar0_off(base, (bar) - 2)
75 
76 static const struct intel_ntb_reg xeon_reg;
77 static const struct intel_ntb_alt_reg xeon_pri_reg;
78 static const struct intel_ntb_alt_reg xeon_sec_reg;
79 static const struct intel_ntb_alt_reg xeon_b2b_reg;
80 static const struct intel_ntb_xlat_reg xeon_pri_xlat;
81 static const struct intel_ntb_xlat_reg xeon_sec_xlat;
82 static const struct ntb_dev_ops intel_ntb_ops;
83 
84 static const struct file_operations intel_ntb_debugfs_info;
85 static struct dentry *debugfs_dir;
86 
87 static int b2b_mw_idx = -1;
88 module_param(b2b_mw_idx, int, 0644);
89 MODULE_PARM_DESC(b2b_mw_idx, "Use this mw idx to access the peer ntb.  A "
90 		 "value of zero or positive starts from first mw idx, and a "
91 		 "negative value starts from last mw idx.  Both sides MUST "
92 		 "set the same value here!");
93 
94 static unsigned int b2b_mw_share;
95 module_param(b2b_mw_share, uint, 0644);
96 MODULE_PARM_DESC(b2b_mw_share, "If the b2b mw is large enough, configure the "
97 		 "ntb so that the peer ntb only occupies the first half of "
98 		 "the mw, so the second half can still be used as a mw.  Both "
99 		 "sides MUST set the same value here!");
100 
101 module_param_named(xeon_b2b_usd_bar2_addr64,
102 		   xeon_b2b_usd_addr.bar2_addr64, ullong, 0644);
103 MODULE_PARM_DESC(xeon_b2b_usd_bar2_addr64,
104 		 "XEON B2B USD BAR 2 64-bit address");
105 
106 module_param_named(xeon_b2b_usd_bar4_addr64,
107 		   xeon_b2b_usd_addr.bar4_addr64, ullong, 0644);
108 MODULE_PARM_DESC(xeon_b2b_usd_bar4_addr64,
109 		 "XEON B2B USD BAR 4 64-bit address");
110 
111 module_param_named(xeon_b2b_usd_bar4_addr32,
112 		   xeon_b2b_usd_addr.bar4_addr32, ullong, 0644);
113 MODULE_PARM_DESC(xeon_b2b_usd_bar4_addr32,
114 		 "XEON B2B USD split-BAR 4 32-bit address");
115 
116 module_param_named(xeon_b2b_usd_bar5_addr32,
117 		   xeon_b2b_usd_addr.bar5_addr32, ullong, 0644);
118 MODULE_PARM_DESC(xeon_b2b_usd_bar5_addr32,
119 		 "XEON B2B USD split-BAR 5 32-bit address");
120 
121 module_param_named(xeon_b2b_dsd_bar2_addr64,
122 		   xeon_b2b_dsd_addr.bar2_addr64, ullong, 0644);
123 MODULE_PARM_DESC(xeon_b2b_dsd_bar2_addr64,
124 		 "XEON B2B DSD BAR 2 64-bit address");
125 
126 module_param_named(xeon_b2b_dsd_bar4_addr64,
127 		   xeon_b2b_dsd_addr.bar4_addr64, ullong, 0644);
128 MODULE_PARM_DESC(xeon_b2b_dsd_bar4_addr64,
129 		 "XEON B2B DSD BAR 4 64-bit address");
130 
131 module_param_named(xeon_b2b_dsd_bar4_addr32,
132 		   xeon_b2b_dsd_addr.bar4_addr32, ullong, 0644);
133 MODULE_PARM_DESC(xeon_b2b_dsd_bar4_addr32,
134 		 "XEON B2B DSD split-BAR 4 32-bit address");
135 
136 module_param_named(xeon_b2b_dsd_bar5_addr32,
137 		   xeon_b2b_dsd_addr.bar5_addr32, ullong, 0644);
138 MODULE_PARM_DESC(xeon_b2b_dsd_bar5_addr32,
139 		 "XEON B2B DSD split-BAR 5 32-bit address");
140 
141 
142 static int xeon_init_isr(struct intel_ntb_dev *ndev);
143 
144 static inline void ndev_reset_unsafe_flags(struct intel_ntb_dev *ndev)
145 {
146 	ndev->unsafe_flags = 0;
147 	ndev->unsafe_flags_ignore = 0;
148 
149 	/* Only B2B has a workaround to avoid SDOORBELL */
150 	if (ndev->hwerr_flags & NTB_HWERR_SDOORBELL_LOCKUP)
151 		if (!ntb_topo_is_b2b(ndev->ntb.topo))
152 			ndev->unsafe_flags |= NTB_UNSAFE_DB;
153 
154 	/* No low level workaround to avoid SB01BASE */
155 	if (ndev->hwerr_flags & NTB_HWERR_SB01BASE_LOCKUP) {
156 		ndev->unsafe_flags |= NTB_UNSAFE_DB;
157 		ndev->unsafe_flags |= NTB_UNSAFE_SPAD;
158 	}
159 }
160 
161 static inline int ndev_is_unsafe(struct intel_ntb_dev *ndev,
162 				 unsigned long flag)
163 {
164 	return !!(flag & ndev->unsafe_flags & ~ndev->unsafe_flags_ignore);
165 }
166 
167 static inline int ndev_ignore_unsafe(struct intel_ntb_dev *ndev,
168 				     unsigned long flag)
169 {
170 	flag &= ndev->unsafe_flags;
171 	ndev->unsafe_flags_ignore |= flag;
172 
173 	return !!flag;
174 }
175 
176 int ndev_mw_to_bar(struct intel_ntb_dev *ndev, int idx)
177 {
178 	if (idx < 0 || idx >= ndev->mw_count)
179 		return -EINVAL;
180 	return ndev->reg->mw_bar[idx];
181 }
182 
183 static inline int ndev_db_addr(struct intel_ntb_dev *ndev,
184 			       phys_addr_t *db_addr, resource_size_t *db_size,
185 			       phys_addr_t reg_addr, unsigned long reg)
186 {
187 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_DB))
188 		pr_warn_once("%s: NTB unsafe doorbell access", __func__);
189 
190 	if (db_addr) {
191 		*db_addr = reg_addr + reg;
192 		dev_dbg(&ndev->ntb.pdev->dev, "Peer db addr %llx\n", *db_addr);
193 	}
194 
195 	if (db_size) {
196 		*db_size = ndev->reg->db_size;
197 		dev_dbg(&ndev->ntb.pdev->dev, "Peer db size %llx\n", *db_size);
198 	}
199 
200 	return 0;
201 }
202 
203 u64 ndev_db_read(struct intel_ntb_dev *ndev,
204 			       void __iomem *mmio)
205 {
206 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_DB))
207 		pr_warn_once("%s: NTB unsafe doorbell access", __func__);
208 
209 	return ndev->reg->db_ioread(mmio);
210 }
211 
212 int ndev_db_write(struct intel_ntb_dev *ndev, u64 db_bits,
213 				void __iomem *mmio)
214 {
215 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_DB))
216 		pr_warn_once("%s: NTB unsafe doorbell access", __func__);
217 
218 	if (db_bits & ~ndev->db_valid_mask)
219 		return -EINVAL;
220 
221 	ndev->reg->db_iowrite(db_bits, mmio);
222 
223 	return 0;
224 }
225 
226 static inline int ndev_db_set_mask(struct intel_ntb_dev *ndev, u64 db_bits,
227 				   void __iomem *mmio)
228 {
229 	unsigned long irqflags;
230 
231 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_DB))
232 		pr_warn_once("%s: NTB unsafe doorbell access", __func__);
233 
234 	if (db_bits & ~ndev->db_valid_mask)
235 		return -EINVAL;
236 
237 	spin_lock_irqsave(&ndev->db_mask_lock, irqflags);
238 	{
239 		ndev->db_mask |= db_bits;
240 		ndev->reg->db_iowrite(ndev->db_mask, mmio);
241 	}
242 	spin_unlock_irqrestore(&ndev->db_mask_lock, irqflags);
243 
244 	return 0;
245 }
246 
247 static inline int ndev_db_clear_mask(struct intel_ntb_dev *ndev, u64 db_bits,
248 				     void __iomem *mmio)
249 {
250 	unsigned long irqflags;
251 
252 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_DB))
253 		pr_warn_once("%s: NTB unsafe doorbell access", __func__);
254 
255 	if (db_bits & ~ndev->db_valid_mask)
256 		return -EINVAL;
257 
258 	spin_lock_irqsave(&ndev->db_mask_lock, irqflags);
259 	{
260 		ndev->db_mask &= ~db_bits;
261 		ndev->reg->db_iowrite(ndev->db_mask, mmio);
262 	}
263 	spin_unlock_irqrestore(&ndev->db_mask_lock, irqflags);
264 
265 	return 0;
266 }
267 
268 static inline int ndev_vec_mask(struct intel_ntb_dev *ndev, int db_vector)
269 {
270 	u64 shift, mask;
271 
272 	shift = ndev->db_vec_shift;
273 	mask = BIT_ULL(shift) - 1;
274 
275 	return mask << (shift * db_vector);
276 }
277 
278 static inline int ndev_spad_addr(struct intel_ntb_dev *ndev, int idx,
279 				 phys_addr_t *spad_addr, phys_addr_t reg_addr,
280 				 unsigned long reg)
281 {
282 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_SPAD))
283 		pr_warn_once("%s: NTB unsafe scratchpad access", __func__);
284 
285 	if (idx < 0 || idx >= ndev->spad_count)
286 		return -EINVAL;
287 
288 	if (spad_addr) {
289 		*spad_addr = reg_addr + reg + (idx << 2);
290 		dev_dbg(&ndev->ntb.pdev->dev, "Peer spad addr %llx\n",
291 			*spad_addr);
292 	}
293 
294 	return 0;
295 }
296 
297 static inline u32 ndev_spad_read(struct intel_ntb_dev *ndev, int idx,
298 				 void __iomem *mmio)
299 {
300 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_SPAD))
301 		pr_warn_once("%s: NTB unsafe scratchpad access", __func__);
302 
303 	if (idx < 0 || idx >= ndev->spad_count)
304 		return 0;
305 
306 	return ioread32(mmio + (idx << 2));
307 }
308 
309 static inline int ndev_spad_write(struct intel_ntb_dev *ndev, int idx, u32 val,
310 				  void __iomem *mmio)
311 {
312 	if (ndev_is_unsafe(ndev, NTB_UNSAFE_SPAD))
313 		pr_warn_once("%s: NTB unsafe scratchpad access", __func__);
314 
315 	if (idx < 0 || idx >= ndev->spad_count)
316 		return -EINVAL;
317 
318 	iowrite32(val, mmio + (idx << 2));
319 
320 	return 0;
321 }
322 
323 static irqreturn_t ndev_interrupt(struct intel_ntb_dev *ndev, int vec)
324 {
325 	u64 vec_mask;
326 
327 	vec_mask = ndev_vec_mask(ndev, vec);
328 
329 	if ((ndev->hwerr_flags & NTB_HWERR_MSIX_VECTOR32_BAD) && (vec == 31))
330 		vec_mask |= ndev->db_link_mask;
331 
332 	dev_dbg(&ndev->ntb.pdev->dev, "vec %d vec_mask %llx\n", vec, vec_mask);
333 
334 	ndev->last_ts = jiffies;
335 
336 	if (vec_mask & ndev->db_link_mask) {
337 		if (ndev->reg->poll_link(ndev))
338 			ntb_link_event(&ndev->ntb);
339 	}
340 
341 	if (vec_mask & ndev->db_valid_mask)
342 		ntb_db_event(&ndev->ntb, vec);
343 
344 	return IRQ_HANDLED;
345 }
346 
347 static irqreturn_t ndev_vec_isr(int irq, void *dev)
348 {
349 	struct intel_ntb_vec *nvec = dev;
350 
351 	dev_dbg(&nvec->ndev->ntb.pdev->dev, "irq: %d  nvec->num: %d\n",
352 		irq, nvec->num);
353 
354 	return ndev_interrupt(nvec->ndev, nvec->num);
355 }
356 
357 static irqreturn_t ndev_irq_isr(int irq, void *dev)
358 {
359 	struct intel_ntb_dev *ndev = dev;
360 
361 	return ndev_interrupt(ndev, irq - ndev->ntb.pdev->irq);
362 }
363 
364 int ndev_init_isr(struct intel_ntb_dev *ndev,
365 			 int msix_min, int msix_max,
366 			 int msix_shift, int total_shift)
367 {
368 	struct pci_dev *pdev;
369 	int rc, i, msix_count, node;
370 
371 	pdev = ndev->ntb.pdev;
372 
373 	node = dev_to_node(&pdev->dev);
374 
375 	/* Mask all doorbell interrupts */
376 	ndev->db_mask = ndev->db_valid_mask;
377 	ndev->reg->db_iowrite(ndev->db_mask,
378 			      ndev->self_mmio +
379 			      ndev->self_reg->db_mask);
380 
381 	/* Try to set up msix irq */
382 
383 	ndev->vec = kcalloc_node(msix_max, sizeof(*ndev->vec),
384 				 GFP_KERNEL, node);
385 	if (!ndev->vec)
386 		goto err_msix_vec_alloc;
387 
388 	ndev->msix = kcalloc_node(msix_max, sizeof(*ndev->msix),
389 				  GFP_KERNEL, node);
390 	if (!ndev->msix)
391 		goto err_msix_alloc;
392 
393 	for (i = 0; i < msix_max; ++i)
394 		ndev->msix[i].entry = i;
395 
396 	msix_count = pci_enable_msix_range(pdev, ndev->msix,
397 					   msix_min, msix_max);
398 	if (msix_count < 0)
399 		goto err_msix_enable;
400 
401 	for (i = 0; i < msix_count; ++i) {
402 		ndev->vec[i].ndev = ndev;
403 		ndev->vec[i].num = i;
404 		rc = request_irq(ndev->msix[i].vector, ndev_vec_isr, 0,
405 				 "ndev_vec_isr", &ndev->vec[i]);
406 		if (rc)
407 			goto err_msix_request;
408 	}
409 
410 	dev_dbg(&pdev->dev, "Using %d msix interrupts\n", msix_count);
411 	ndev->db_vec_count = msix_count;
412 	ndev->db_vec_shift = msix_shift;
413 	return 0;
414 
415 err_msix_request:
416 	while (i-- > 0)
417 		free_irq(ndev->msix[i].vector, &ndev->vec[i]);
418 	pci_disable_msix(pdev);
419 err_msix_enable:
420 	kfree(ndev->msix);
421 err_msix_alloc:
422 	kfree(ndev->vec);
423 err_msix_vec_alloc:
424 	ndev->msix = NULL;
425 	ndev->vec = NULL;
426 
427 	/* Try to set up msi irq */
428 
429 	rc = pci_enable_msi(pdev);
430 	if (rc)
431 		goto err_msi_enable;
432 
433 	rc = request_irq(pdev->irq, ndev_irq_isr, 0,
434 			 "ndev_irq_isr", ndev);
435 	if (rc)
436 		goto err_msi_request;
437 
438 	dev_dbg(&pdev->dev, "Using msi interrupts\n");
439 	ndev->db_vec_count = 1;
440 	ndev->db_vec_shift = total_shift;
441 	return 0;
442 
443 err_msi_request:
444 	pci_disable_msi(pdev);
445 err_msi_enable:
446 
447 	/* Try to set up intx irq */
448 
449 	pci_intx(pdev, 1);
450 
451 	rc = request_irq(pdev->irq, ndev_irq_isr, IRQF_SHARED,
452 			 "ndev_irq_isr", ndev);
453 	if (rc)
454 		goto err_intx_request;
455 
456 	dev_dbg(&pdev->dev, "Using intx interrupts\n");
457 	ndev->db_vec_count = 1;
458 	ndev->db_vec_shift = total_shift;
459 	return 0;
460 
461 err_intx_request:
462 	return rc;
463 }
464 
465 static void ndev_deinit_isr(struct intel_ntb_dev *ndev)
466 {
467 	struct pci_dev *pdev;
468 	int i;
469 
470 	pdev = ndev->ntb.pdev;
471 
472 	/* Mask all doorbell interrupts */
473 	ndev->db_mask = ndev->db_valid_mask;
474 	ndev->reg->db_iowrite(ndev->db_mask,
475 			      ndev->self_mmio +
476 			      ndev->self_reg->db_mask);
477 
478 	if (ndev->msix) {
479 		i = ndev->db_vec_count;
480 		while (i--)
481 			free_irq(ndev->msix[i].vector, &ndev->vec[i]);
482 		pci_disable_msix(pdev);
483 		kfree(ndev->msix);
484 		kfree(ndev->vec);
485 	} else {
486 		free_irq(pdev->irq, ndev);
487 		if (pci_dev_msi_enabled(pdev))
488 			pci_disable_msi(pdev);
489 	}
490 }
491 
492 static ssize_t ndev_ntb_debugfs_read(struct file *filp, char __user *ubuf,
493 				     size_t count, loff_t *offp)
494 {
495 	struct intel_ntb_dev *ndev;
496 	struct pci_dev *pdev;
497 	void __iomem *mmio;
498 	char *buf;
499 	size_t buf_size;
500 	ssize_t ret, off;
501 	union { u64 v64; u32 v32; u16 v16; u8 v8; } u;
502 
503 	ndev = filp->private_data;
504 	pdev = ndev->ntb.pdev;
505 	mmio = ndev->self_mmio;
506 
507 	buf_size = min(count, 0x800ul);
508 
509 	buf = kmalloc(buf_size, GFP_KERNEL);
510 	if (!buf)
511 		return -ENOMEM;
512 
513 	off = 0;
514 
515 	off += scnprintf(buf + off, buf_size - off,
516 			 "NTB Device Information:\n");
517 
518 	off += scnprintf(buf + off, buf_size - off,
519 			 "Connection Topology -\t%s\n",
520 			 ntb_topo_string(ndev->ntb.topo));
521 
522 	if (ndev->b2b_idx != UINT_MAX) {
523 		off += scnprintf(buf + off, buf_size - off,
524 				 "B2B MW Idx -\t\t%u\n", ndev->b2b_idx);
525 		off += scnprintf(buf + off, buf_size - off,
526 				 "B2B Offset -\t\t%#lx\n", ndev->b2b_off);
527 	}
528 
529 	off += scnprintf(buf + off, buf_size - off,
530 			 "BAR4 Split -\t\t%s\n",
531 			 ndev->bar4_split ? "yes" : "no");
532 
533 	off += scnprintf(buf + off, buf_size - off,
534 			 "NTB CTL -\t\t%#06x\n", ndev->ntb_ctl);
535 	off += scnprintf(buf + off, buf_size - off,
536 			 "LNK STA -\t\t%#06x\n", ndev->lnk_sta);
537 
538 	if (!ndev->reg->link_is_up(ndev)) {
539 		off += scnprintf(buf + off, buf_size - off,
540 				 "Link Status -\t\tDown\n");
541 	} else {
542 		off += scnprintf(buf + off, buf_size - off,
543 				 "Link Status -\t\tUp\n");
544 		off += scnprintf(buf + off, buf_size - off,
545 				 "Link Speed -\t\tPCI-E Gen %u\n",
546 				 NTB_LNK_STA_SPEED(ndev->lnk_sta));
547 		off += scnprintf(buf + off, buf_size - off,
548 				 "Link Width -\t\tx%u\n",
549 				 NTB_LNK_STA_WIDTH(ndev->lnk_sta));
550 	}
551 
552 	off += scnprintf(buf + off, buf_size - off,
553 			 "Memory Window Count -\t%u\n", ndev->mw_count);
554 	off += scnprintf(buf + off, buf_size - off,
555 			 "Scratchpad Count -\t%u\n", ndev->spad_count);
556 	off += scnprintf(buf + off, buf_size - off,
557 			 "Doorbell Count -\t%u\n", ndev->db_count);
558 	off += scnprintf(buf + off, buf_size - off,
559 			 "Doorbell Vector Count -\t%u\n", ndev->db_vec_count);
560 	off += scnprintf(buf + off, buf_size - off,
561 			 "Doorbell Vector Shift -\t%u\n", ndev->db_vec_shift);
562 
563 	off += scnprintf(buf + off, buf_size - off,
564 			 "Doorbell Valid Mask -\t%#llx\n", ndev->db_valid_mask);
565 	off += scnprintf(buf + off, buf_size - off,
566 			 "Doorbell Link Mask -\t%#llx\n", ndev->db_link_mask);
567 	off += scnprintf(buf + off, buf_size - off,
568 			 "Doorbell Mask Cached -\t%#llx\n", ndev->db_mask);
569 
570 	u.v64 = ndev_db_read(ndev, mmio + ndev->self_reg->db_mask);
571 	off += scnprintf(buf + off, buf_size - off,
572 			 "Doorbell Mask -\t\t%#llx\n", u.v64);
573 
574 	u.v64 = ndev_db_read(ndev, mmio + ndev->self_reg->db_bell);
575 	off += scnprintf(buf + off, buf_size - off,
576 			 "Doorbell Bell -\t\t%#llx\n", u.v64);
577 
578 	off += scnprintf(buf + off, buf_size - off,
579 			 "\nNTB Window Size:\n");
580 
581 	pci_read_config_byte(pdev, XEON_PBAR23SZ_OFFSET, &u.v8);
582 	off += scnprintf(buf + off, buf_size - off,
583 			 "PBAR23SZ %hhu\n", u.v8);
584 	if (!ndev->bar4_split) {
585 		pci_read_config_byte(pdev, XEON_PBAR45SZ_OFFSET, &u.v8);
586 		off += scnprintf(buf + off, buf_size - off,
587 				 "PBAR45SZ %hhu\n", u.v8);
588 	} else {
589 		pci_read_config_byte(pdev, XEON_PBAR4SZ_OFFSET, &u.v8);
590 		off += scnprintf(buf + off, buf_size - off,
591 				 "PBAR4SZ %hhu\n", u.v8);
592 		pci_read_config_byte(pdev, XEON_PBAR5SZ_OFFSET, &u.v8);
593 		off += scnprintf(buf + off, buf_size - off,
594 				 "PBAR5SZ %hhu\n", u.v8);
595 	}
596 
597 	pci_read_config_byte(pdev, XEON_SBAR23SZ_OFFSET, &u.v8);
598 	off += scnprintf(buf + off, buf_size - off,
599 			 "SBAR23SZ %hhu\n", u.v8);
600 	if (!ndev->bar4_split) {
601 		pci_read_config_byte(pdev, XEON_SBAR45SZ_OFFSET, &u.v8);
602 		off += scnprintf(buf + off, buf_size - off,
603 				 "SBAR45SZ %hhu\n", u.v8);
604 	} else {
605 		pci_read_config_byte(pdev, XEON_SBAR4SZ_OFFSET, &u.v8);
606 		off += scnprintf(buf + off, buf_size - off,
607 				 "SBAR4SZ %hhu\n", u.v8);
608 		pci_read_config_byte(pdev, XEON_SBAR5SZ_OFFSET, &u.v8);
609 		off += scnprintf(buf + off, buf_size - off,
610 				 "SBAR5SZ %hhu\n", u.v8);
611 	}
612 
613 	off += scnprintf(buf + off, buf_size - off,
614 			 "\nNTB Incoming XLAT:\n");
615 
616 	u.v64 = ioread64(mmio + bar2_off(ndev->xlat_reg->bar2_xlat, 2));
617 	off += scnprintf(buf + off, buf_size - off,
618 			 "XLAT23 -\t\t%#018llx\n", u.v64);
619 
620 	if (ndev->bar4_split) {
621 		u.v32 = ioread32(mmio + bar2_off(ndev->xlat_reg->bar2_xlat, 4));
622 		off += scnprintf(buf + off, buf_size - off,
623 				 "XLAT4 -\t\t\t%#06x\n", u.v32);
624 
625 		u.v32 = ioread32(mmio + bar2_off(ndev->xlat_reg->bar2_xlat, 5));
626 		off += scnprintf(buf + off, buf_size - off,
627 				 "XLAT5 -\t\t\t%#06x\n", u.v32);
628 	} else {
629 		u.v64 = ioread64(mmio + bar2_off(ndev->xlat_reg->bar2_xlat, 4));
630 		off += scnprintf(buf + off, buf_size - off,
631 				 "XLAT45 -\t\t%#018llx\n", u.v64);
632 	}
633 
634 	u.v64 = ioread64(mmio + bar2_off(ndev->xlat_reg->bar2_limit, 2));
635 	off += scnprintf(buf + off, buf_size - off,
636 			 "LMT23 -\t\t\t%#018llx\n", u.v64);
637 
638 	if (ndev->bar4_split) {
639 		u.v32 = ioread32(mmio + bar2_off(ndev->xlat_reg->bar2_limit, 4));
640 		off += scnprintf(buf + off, buf_size - off,
641 				 "LMT4 -\t\t\t%#06x\n", u.v32);
642 		u.v32 = ioread32(mmio + bar2_off(ndev->xlat_reg->bar2_limit, 5));
643 		off += scnprintf(buf + off, buf_size - off,
644 				 "LMT5 -\t\t\t%#06x\n", u.v32);
645 	} else {
646 		u.v64 = ioread64(mmio + bar2_off(ndev->xlat_reg->bar2_limit, 4));
647 		off += scnprintf(buf + off, buf_size - off,
648 				 "LMT45 -\t\t\t%#018llx\n", u.v64);
649 	}
650 
651 	if (pdev_is_gen1(pdev)) {
652 		if (ntb_topo_is_b2b(ndev->ntb.topo)) {
653 			off += scnprintf(buf + off, buf_size - off,
654 					 "\nNTB Outgoing B2B XLAT:\n");
655 
656 			u.v64 = ioread64(mmio + XEON_PBAR23XLAT_OFFSET);
657 			off += scnprintf(buf + off, buf_size - off,
658 					 "B2B XLAT23 -\t\t%#018llx\n", u.v64);
659 
660 			if (ndev->bar4_split) {
661 				u.v32 = ioread32(mmio + XEON_PBAR4XLAT_OFFSET);
662 				off += scnprintf(buf + off, buf_size - off,
663 						 "B2B XLAT4 -\t\t%#06x\n",
664 						 u.v32);
665 				u.v32 = ioread32(mmio + XEON_PBAR5XLAT_OFFSET);
666 				off += scnprintf(buf + off, buf_size - off,
667 						 "B2B XLAT5 -\t\t%#06x\n",
668 						 u.v32);
669 			} else {
670 				u.v64 = ioread64(mmio + XEON_PBAR45XLAT_OFFSET);
671 				off += scnprintf(buf + off, buf_size - off,
672 						 "B2B XLAT45 -\t\t%#018llx\n",
673 						 u.v64);
674 			}
675 
676 			u.v64 = ioread64(mmio + XEON_PBAR23LMT_OFFSET);
677 			off += scnprintf(buf + off, buf_size - off,
678 					 "B2B LMT23 -\t\t%#018llx\n", u.v64);
679 
680 			if (ndev->bar4_split) {
681 				u.v32 = ioread32(mmio + XEON_PBAR4LMT_OFFSET);
682 				off += scnprintf(buf + off, buf_size - off,
683 						 "B2B LMT4 -\t\t%#06x\n",
684 						 u.v32);
685 				u.v32 = ioread32(mmio + XEON_PBAR5LMT_OFFSET);
686 				off += scnprintf(buf + off, buf_size - off,
687 						 "B2B LMT5 -\t\t%#06x\n",
688 						 u.v32);
689 			} else {
690 				u.v64 = ioread64(mmio + XEON_PBAR45LMT_OFFSET);
691 				off += scnprintf(buf + off, buf_size - off,
692 						 "B2B LMT45 -\t\t%#018llx\n",
693 						 u.v64);
694 			}
695 
696 			off += scnprintf(buf + off, buf_size - off,
697 					 "\nNTB Secondary BAR:\n");
698 
699 			u.v64 = ioread64(mmio + XEON_SBAR0BASE_OFFSET);
700 			off += scnprintf(buf + off, buf_size - off,
701 					 "SBAR01 -\t\t%#018llx\n", u.v64);
702 
703 			u.v64 = ioread64(mmio + XEON_SBAR23BASE_OFFSET);
704 			off += scnprintf(buf + off, buf_size - off,
705 					 "SBAR23 -\t\t%#018llx\n", u.v64);
706 
707 			if (ndev->bar4_split) {
708 				u.v32 = ioread32(mmio + XEON_SBAR4BASE_OFFSET);
709 				off += scnprintf(buf + off, buf_size - off,
710 						 "SBAR4 -\t\t\t%#06x\n", u.v32);
711 				u.v32 = ioread32(mmio + XEON_SBAR5BASE_OFFSET);
712 				off += scnprintf(buf + off, buf_size - off,
713 						 "SBAR5 -\t\t\t%#06x\n", u.v32);
714 			} else {
715 				u.v64 = ioread64(mmio + XEON_SBAR45BASE_OFFSET);
716 				off += scnprintf(buf + off, buf_size - off,
717 						 "SBAR45 -\t\t%#018llx\n",
718 						 u.v64);
719 			}
720 		}
721 
722 		off += scnprintf(buf + off, buf_size - off,
723 				 "\nXEON NTB Statistics:\n");
724 
725 		u.v16 = ioread16(mmio + XEON_USMEMMISS_OFFSET);
726 		off += scnprintf(buf + off, buf_size - off,
727 				 "Upstream Memory Miss -\t%u\n", u.v16);
728 
729 		off += scnprintf(buf + off, buf_size - off,
730 				 "\nXEON NTB Hardware Errors:\n");
731 
732 		if (!pci_read_config_word(pdev,
733 					  XEON_DEVSTS_OFFSET, &u.v16))
734 			off += scnprintf(buf + off, buf_size - off,
735 					 "DEVSTS -\t\t%#06x\n", u.v16);
736 
737 		if (!pci_read_config_word(pdev,
738 					  XEON_LINK_STATUS_OFFSET, &u.v16))
739 			off += scnprintf(buf + off, buf_size - off,
740 					 "LNKSTS -\t\t%#06x\n", u.v16);
741 
742 		if (!pci_read_config_dword(pdev,
743 					   XEON_UNCERRSTS_OFFSET, &u.v32))
744 			off += scnprintf(buf + off, buf_size - off,
745 					 "UNCERRSTS -\t\t%#06x\n", u.v32);
746 
747 		if (!pci_read_config_dword(pdev,
748 					   XEON_CORERRSTS_OFFSET, &u.v32))
749 			off += scnprintf(buf + off, buf_size - off,
750 					 "CORERRSTS -\t\t%#06x\n", u.v32);
751 	}
752 
753 	ret = simple_read_from_buffer(ubuf, count, offp, buf, off);
754 	kfree(buf);
755 	return ret;
756 }
757 
758 static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
759 				 size_t count, loff_t *offp)
760 {
761 	struct intel_ntb_dev *ndev = filp->private_data;
762 
763 	if (pdev_is_gen1(ndev->ntb.pdev))
764 		return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
765 	else if (pdev_is_gen3(ndev->ntb.pdev))
766 		return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
767 
768 	return -ENXIO;
769 }
770 
771 static void ndev_init_debugfs(struct intel_ntb_dev *ndev)
772 {
773 	if (!debugfs_dir) {
774 		ndev->debugfs_dir = NULL;
775 		ndev->debugfs_info = NULL;
776 	} else {
777 		ndev->debugfs_dir =
778 			debugfs_create_dir(pci_name(ndev->ntb.pdev),
779 					   debugfs_dir);
780 		if (!ndev->debugfs_dir)
781 			ndev->debugfs_info = NULL;
782 		else
783 			ndev->debugfs_info =
784 				debugfs_create_file("info", S_IRUSR,
785 						    ndev->debugfs_dir, ndev,
786 						    &intel_ntb_debugfs_info);
787 	}
788 }
789 
790 static void ndev_deinit_debugfs(struct intel_ntb_dev *ndev)
791 {
792 	debugfs_remove_recursive(ndev->debugfs_dir);
793 }
794 
795 int intel_ntb_mw_count(struct ntb_dev *ntb, int pidx)
796 {
797 	if (pidx != NTB_DEF_PEER_IDX)
798 		return -EINVAL;
799 
800 	return ntb_ndev(ntb)->mw_count;
801 }
802 
803 int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx,
804 			   resource_size_t *addr_align,
805 			   resource_size_t *size_align,
806 			   resource_size_t *size_max)
807 {
808 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
809 	resource_size_t bar_size, mw_size;
810 	int bar;
811 
812 	if (pidx != NTB_DEF_PEER_IDX)
813 		return -EINVAL;
814 
815 	if (idx >= ndev->b2b_idx && !ndev->b2b_off)
816 		idx += 1;
817 
818 	bar = ndev_mw_to_bar(ndev, idx);
819 	if (bar < 0)
820 		return bar;
821 
822 	bar_size = pci_resource_len(ndev->ntb.pdev, bar);
823 
824 	if (idx == ndev->b2b_idx)
825 		mw_size = bar_size - ndev->b2b_off;
826 	else
827 		mw_size = bar_size;
828 
829 	if (addr_align)
830 		*addr_align = pci_resource_len(ndev->ntb.pdev, bar);
831 
832 	if (size_align)
833 		*size_align = 1;
834 
835 	if (size_max)
836 		*size_max = mw_size;
837 
838 	return 0;
839 }
840 
841 static int intel_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx,
842 				  dma_addr_t addr, resource_size_t size)
843 {
844 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
845 	unsigned long base_reg, xlat_reg, limit_reg;
846 	resource_size_t bar_size, mw_size;
847 	void __iomem *mmio;
848 	u64 base, limit, reg_val;
849 	int bar;
850 
851 	if (pidx != NTB_DEF_PEER_IDX)
852 		return -EINVAL;
853 
854 	if (idx >= ndev->b2b_idx && !ndev->b2b_off)
855 		idx += 1;
856 
857 	bar = ndev_mw_to_bar(ndev, idx);
858 	if (bar < 0)
859 		return bar;
860 
861 	bar_size = pci_resource_len(ndev->ntb.pdev, bar);
862 
863 	if (idx == ndev->b2b_idx)
864 		mw_size = bar_size - ndev->b2b_off;
865 	else
866 		mw_size = bar_size;
867 
868 	/* hardware requires that addr is aligned to bar size */
869 	if (addr & (bar_size - 1))
870 		return -EINVAL;
871 
872 	/* make sure the range fits in the usable mw size */
873 	if (size > mw_size)
874 		return -EINVAL;
875 
876 	mmio = ndev->self_mmio;
877 	base_reg = bar0_off(ndev->xlat_reg->bar0_base, bar);
878 	xlat_reg = bar2_off(ndev->xlat_reg->bar2_xlat, bar);
879 	limit_reg = bar2_off(ndev->xlat_reg->bar2_limit, bar);
880 
881 	if (bar < 4 || !ndev->bar4_split) {
882 		base = ioread64(mmio + base_reg) & NTB_BAR_MASK_64;
883 
884 		/* Set the limit if supported, if size is not mw_size */
885 		if (limit_reg && size != mw_size)
886 			limit = base + size;
887 		else
888 			limit = 0;
889 
890 		/* set and verify setting the translation address */
891 		iowrite64(addr, mmio + xlat_reg);
892 		reg_val = ioread64(mmio + xlat_reg);
893 		if (reg_val != addr) {
894 			iowrite64(0, mmio + xlat_reg);
895 			return -EIO;
896 		}
897 
898 		/* set and verify setting the limit */
899 		iowrite64(limit, mmio + limit_reg);
900 		reg_val = ioread64(mmio + limit_reg);
901 		if (reg_val != limit) {
902 			iowrite64(base, mmio + limit_reg);
903 			iowrite64(0, mmio + xlat_reg);
904 			return -EIO;
905 		}
906 	} else {
907 		/* split bar addr range must all be 32 bit */
908 		if (addr & (~0ull << 32))
909 			return -EINVAL;
910 		if ((addr + size) & (~0ull << 32))
911 			return -EINVAL;
912 
913 		base = ioread32(mmio + base_reg) & NTB_BAR_MASK_32;
914 
915 		/* Set the limit if supported, if size is not mw_size */
916 		if (limit_reg && size != mw_size)
917 			limit = base + size;
918 		else
919 			limit = 0;
920 
921 		/* set and verify setting the translation address */
922 		iowrite32(addr, mmio + xlat_reg);
923 		reg_val = ioread32(mmio + xlat_reg);
924 		if (reg_val != addr) {
925 			iowrite32(0, mmio + xlat_reg);
926 			return -EIO;
927 		}
928 
929 		/* set and verify setting the limit */
930 		iowrite32(limit, mmio + limit_reg);
931 		reg_val = ioread32(mmio + limit_reg);
932 		if (reg_val != limit) {
933 			iowrite32(base, mmio + limit_reg);
934 			iowrite32(0, mmio + xlat_reg);
935 			return -EIO;
936 		}
937 	}
938 
939 	return 0;
940 }
941 
942 u64 intel_ntb_link_is_up(struct ntb_dev *ntb, enum ntb_speed *speed,
943 			 enum ntb_width *width)
944 {
945 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
946 
947 	if (ndev->reg->link_is_up(ndev)) {
948 		if (speed)
949 			*speed = NTB_LNK_STA_SPEED(ndev->lnk_sta);
950 		if (width)
951 			*width = NTB_LNK_STA_WIDTH(ndev->lnk_sta);
952 		return 1;
953 	} else {
954 		/* TODO MAYBE: is it possible to observe the link speed and
955 		 * width while link is training? */
956 		if (speed)
957 			*speed = NTB_SPEED_NONE;
958 		if (width)
959 			*width = NTB_WIDTH_NONE;
960 		return 0;
961 	}
962 }
963 
964 static int intel_ntb_link_enable(struct ntb_dev *ntb,
965 				 enum ntb_speed max_speed,
966 				 enum ntb_width max_width)
967 {
968 	struct intel_ntb_dev *ndev;
969 	u32 ntb_ctl;
970 
971 	ndev = container_of(ntb, struct intel_ntb_dev, ntb);
972 
973 	if (ndev->ntb.topo == NTB_TOPO_SEC)
974 		return -EINVAL;
975 
976 	dev_dbg(&ntb->pdev->dev,
977 		"Enabling link with max_speed %d max_width %d\n",
978 		max_speed, max_width);
979 	if (max_speed != NTB_SPEED_AUTO)
980 		dev_dbg(&ntb->pdev->dev, "ignoring max_speed %d\n", max_speed);
981 	if (max_width != NTB_WIDTH_AUTO)
982 		dev_dbg(&ntb->pdev->dev, "ignoring max_width %d\n", max_width);
983 
984 	ntb_ctl = ioread32(ndev->self_mmio + ndev->reg->ntb_ctl);
985 	ntb_ctl &= ~(NTB_CTL_DISABLE | NTB_CTL_CFG_LOCK);
986 	ntb_ctl |= NTB_CTL_P2S_BAR2_SNOOP | NTB_CTL_S2P_BAR2_SNOOP;
987 	ntb_ctl |= NTB_CTL_P2S_BAR4_SNOOP | NTB_CTL_S2P_BAR4_SNOOP;
988 	if (ndev->bar4_split)
989 		ntb_ctl |= NTB_CTL_P2S_BAR5_SNOOP | NTB_CTL_S2P_BAR5_SNOOP;
990 	iowrite32(ntb_ctl, ndev->self_mmio + ndev->reg->ntb_ctl);
991 
992 	return 0;
993 }
994 
995 int intel_ntb_link_disable(struct ntb_dev *ntb)
996 {
997 	struct intel_ntb_dev *ndev;
998 	u32 ntb_cntl;
999 
1000 	ndev = container_of(ntb, struct intel_ntb_dev, ntb);
1001 
1002 	if (ndev->ntb.topo == NTB_TOPO_SEC)
1003 		return -EINVAL;
1004 
1005 	dev_dbg(&ntb->pdev->dev, "Disabling link\n");
1006 
1007 	/* Bring NTB link down */
1008 	ntb_cntl = ioread32(ndev->self_mmio + ndev->reg->ntb_ctl);
1009 	ntb_cntl &= ~(NTB_CTL_P2S_BAR2_SNOOP | NTB_CTL_S2P_BAR2_SNOOP);
1010 	ntb_cntl &= ~(NTB_CTL_P2S_BAR4_SNOOP | NTB_CTL_S2P_BAR4_SNOOP);
1011 	if (ndev->bar4_split)
1012 		ntb_cntl &= ~(NTB_CTL_P2S_BAR5_SNOOP | NTB_CTL_S2P_BAR5_SNOOP);
1013 	ntb_cntl |= NTB_CTL_DISABLE | NTB_CTL_CFG_LOCK;
1014 	iowrite32(ntb_cntl, ndev->self_mmio + ndev->reg->ntb_ctl);
1015 
1016 	return 0;
1017 }
1018 
1019 int intel_ntb_peer_mw_count(struct ntb_dev *ntb)
1020 {
1021 	/* Numbers of inbound and outbound memory windows match */
1022 	return ntb_ndev(ntb)->mw_count;
1023 }
1024 
1025 int intel_ntb_peer_mw_get_addr(struct ntb_dev *ntb, int idx,
1026 			       phys_addr_t *base, resource_size_t *size)
1027 {
1028 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1029 	int bar;
1030 
1031 	if (idx >= ndev->b2b_idx && !ndev->b2b_off)
1032 		idx += 1;
1033 
1034 	bar = ndev_mw_to_bar(ndev, idx);
1035 	if (bar < 0)
1036 		return bar;
1037 
1038 	if (base)
1039 		*base = pci_resource_start(ndev->ntb.pdev, bar) +
1040 			(idx == ndev->b2b_idx ? ndev->b2b_off : 0);
1041 
1042 	if (size)
1043 		*size = pci_resource_len(ndev->ntb.pdev, bar) -
1044 			(idx == ndev->b2b_idx ? ndev->b2b_off : 0);
1045 
1046 	return 0;
1047 }
1048 
1049 static int intel_ntb_db_is_unsafe(struct ntb_dev *ntb)
1050 {
1051 	return ndev_ignore_unsafe(ntb_ndev(ntb), NTB_UNSAFE_DB);
1052 }
1053 
1054 u64 intel_ntb_db_valid_mask(struct ntb_dev *ntb)
1055 {
1056 	return ntb_ndev(ntb)->db_valid_mask;
1057 }
1058 
1059 int intel_ntb_db_vector_count(struct ntb_dev *ntb)
1060 {
1061 	struct intel_ntb_dev *ndev;
1062 
1063 	ndev = container_of(ntb, struct intel_ntb_dev, ntb);
1064 
1065 	return ndev->db_vec_count;
1066 }
1067 
1068 u64 intel_ntb_db_vector_mask(struct ntb_dev *ntb, int db_vector)
1069 {
1070 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1071 
1072 	if (db_vector < 0 || db_vector > ndev->db_vec_count)
1073 		return 0;
1074 
1075 	return ndev->db_valid_mask & ndev_vec_mask(ndev, db_vector);
1076 }
1077 
1078 static u64 intel_ntb_db_read(struct ntb_dev *ntb)
1079 {
1080 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1081 
1082 	return ndev_db_read(ndev,
1083 			    ndev->self_mmio +
1084 			    ndev->self_reg->db_bell);
1085 }
1086 
1087 static int intel_ntb_db_clear(struct ntb_dev *ntb, u64 db_bits)
1088 {
1089 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1090 
1091 	return ndev_db_write(ndev, db_bits,
1092 			     ndev->self_mmio +
1093 			     ndev->self_reg->db_bell);
1094 }
1095 
1096 int intel_ntb_db_set_mask(struct ntb_dev *ntb, u64 db_bits)
1097 {
1098 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1099 
1100 	return ndev_db_set_mask(ndev, db_bits,
1101 				ndev->self_mmio +
1102 				ndev->self_reg->db_mask);
1103 }
1104 
1105 int intel_ntb_db_clear_mask(struct ntb_dev *ntb, u64 db_bits)
1106 {
1107 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1108 
1109 	return ndev_db_clear_mask(ndev, db_bits,
1110 				  ndev->self_mmio +
1111 				  ndev->self_reg->db_mask);
1112 }
1113 
1114 int intel_ntb_peer_db_addr(struct ntb_dev *ntb, phys_addr_t *db_addr,
1115 			   resource_size_t *db_size)
1116 {
1117 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1118 
1119 	return ndev_db_addr(ndev, db_addr, db_size, ndev->peer_addr,
1120 			    ndev->peer_reg->db_bell);
1121 }
1122 
1123 static int intel_ntb_peer_db_set(struct ntb_dev *ntb, u64 db_bits)
1124 {
1125 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1126 
1127 	return ndev_db_write(ndev, db_bits,
1128 			     ndev->peer_mmio +
1129 			     ndev->peer_reg->db_bell);
1130 }
1131 
1132 int intel_ntb_spad_is_unsafe(struct ntb_dev *ntb)
1133 {
1134 	return ndev_ignore_unsafe(ntb_ndev(ntb), NTB_UNSAFE_SPAD);
1135 }
1136 
1137 int intel_ntb_spad_count(struct ntb_dev *ntb)
1138 {
1139 	struct intel_ntb_dev *ndev;
1140 
1141 	ndev = container_of(ntb, struct intel_ntb_dev, ntb);
1142 
1143 	return ndev->spad_count;
1144 }
1145 
1146 u32 intel_ntb_spad_read(struct ntb_dev *ntb, int idx)
1147 {
1148 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1149 
1150 	return ndev_spad_read(ndev, idx,
1151 			      ndev->self_mmio +
1152 			      ndev->self_reg->spad);
1153 }
1154 
1155 int intel_ntb_spad_write(struct ntb_dev *ntb, int idx, u32 val)
1156 {
1157 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1158 
1159 	return ndev_spad_write(ndev, idx, val,
1160 			       ndev->self_mmio +
1161 			       ndev->self_reg->spad);
1162 }
1163 
1164 int intel_ntb_peer_spad_addr(struct ntb_dev *ntb, int pidx, int sidx,
1165 			     phys_addr_t *spad_addr)
1166 {
1167 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1168 
1169 	return ndev_spad_addr(ndev, sidx, spad_addr, ndev->peer_addr,
1170 			      ndev->peer_reg->spad);
1171 }
1172 
1173 u32 intel_ntb_peer_spad_read(struct ntb_dev *ntb, int pidx, int sidx)
1174 {
1175 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1176 
1177 	return ndev_spad_read(ndev, sidx,
1178 			      ndev->peer_mmio +
1179 			      ndev->peer_reg->spad);
1180 }
1181 
1182 int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx, int sidx,
1183 			      u32 val)
1184 {
1185 	struct intel_ntb_dev *ndev = ntb_ndev(ntb);
1186 
1187 	return ndev_spad_write(ndev, sidx, val,
1188 			       ndev->peer_mmio +
1189 			       ndev->peer_reg->spad);
1190 }
1191 
1192 static u64 xeon_db_ioread(void __iomem *mmio)
1193 {
1194 	return (u64)ioread16(mmio);
1195 }
1196 
1197 static void xeon_db_iowrite(u64 bits, void __iomem *mmio)
1198 {
1199 	iowrite16((u16)bits, mmio);
1200 }
1201 
1202 static int xeon_poll_link(struct intel_ntb_dev *ndev)
1203 {
1204 	u16 reg_val;
1205 	int rc;
1206 
1207 	ndev->reg->db_iowrite(ndev->db_link_mask,
1208 			      ndev->self_mmio +
1209 			      ndev->self_reg->db_bell);
1210 
1211 	rc = pci_read_config_word(ndev->ntb.pdev,
1212 				  XEON_LINK_STATUS_OFFSET, &reg_val);
1213 	if (rc)
1214 		return 0;
1215 
1216 	if (reg_val == ndev->lnk_sta)
1217 		return 0;
1218 
1219 	ndev->lnk_sta = reg_val;
1220 
1221 	return 1;
1222 }
1223 
1224 int xeon_link_is_up(struct intel_ntb_dev *ndev)
1225 {
1226 	if (ndev->ntb.topo == NTB_TOPO_SEC)
1227 		return 1;
1228 
1229 	return NTB_LNK_STA_ACTIVE(ndev->lnk_sta);
1230 }
1231 
1232 enum ntb_topo xeon_ppd_topo(struct intel_ntb_dev *ndev, u8 ppd)
1233 {
1234 	switch (ppd & XEON_PPD_TOPO_MASK) {
1235 	case XEON_PPD_TOPO_B2B_USD:
1236 		return NTB_TOPO_B2B_USD;
1237 
1238 	case XEON_PPD_TOPO_B2B_DSD:
1239 		return NTB_TOPO_B2B_DSD;
1240 
1241 	case XEON_PPD_TOPO_PRI_USD:
1242 	case XEON_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
1243 		return NTB_TOPO_PRI;
1244 
1245 	case XEON_PPD_TOPO_SEC_USD:
1246 	case XEON_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
1247 		return NTB_TOPO_SEC;
1248 	}
1249 
1250 	return NTB_TOPO_NONE;
1251 }
1252 
1253 static inline int xeon_ppd_bar4_split(struct intel_ntb_dev *ndev, u8 ppd)
1254 {
1255 	if (ppd & XEON_PPD_SPLIT_BAR_MASK) {
1256 		dev_dbg(&ndev->ntb.pdev->dev, "PPD %d split bar\n", ppd);
1257 		return 1;
1258 	}
1259 	return 0;
1260 }
1261 
1262 static int xeon_init_isr(struct intel_ntb_dev *ndev)
1263 {
1264 	return ndev_init_isr(ndev, XEON_DB_MSIX_VECTOR_COUNT,
1265 			     XEON_DB_MSIX_VECTOR_COUNT,
1266 			     XEON_DB_MSIX_VECTOR_SHIFT,
1267 			     XEON_DB_TOTAL_SHIFT);
1268 }
1269 
1270 static void xeon_deinit_isr(struct intel_ntb_dev *ndev)
1271 {
1272 	ndev_deinit_isr(ndev);
1273 }
1274 
1275 static int xeon_setup_b2b_mw(struct intel_ntb_dev *ndev,
1276 			     const struct intel_b2b_addr *addr,
1277 			     const struct intel_b2b_addr *peer_addr)
1278 {
1279 	struct pci_dev *pdev;
1280 	void __iomem *mmio;
1281 	resource_size_t bar_size;
1282 	phys_addr_t bar_addr;
1283 	int b2b_bar;
1284 	u8 bar_sz;
1285 
1286 	pdev = ndev->ntb.pdev;
1287 	mmio = ndev->self_mmio;
1288 
1289 	if (ndev->b2b_idx == UINT_MAX) {
1290 		dev_dbg(&pdev->dev, "not using b2b mw\n");
1291 		b2b_bar = 0;
1292 		ndev->b2b_off = 0;
1293 	} else {
1294 		b2b_bar = ndev_mw_to_bar(ndev, ndev->b2b_idx);
1295 		if (b2b_bar < 0)
1296 			return -EIO;
1297 
1298 		dev_dbg(&pdev->dev, "using b2b mw bar %d\n", b2b_bar);
1299 
1300 		bar_size = pci_resource_len(ndev->ntb.pdev, b2b_bar);
1301 
1302 		dev_dbg(&pdev->dev, "b2b bar size %#llx\n", bar_size);
1303 
1304 		if (b2b_mw_share && XEON_B2B_MIN_SIZE <= bar_size >> 1) {
1305 			dev_dbg(&pdev->dev, "b2b using first half of bar\n");
1306 			ndev->b2b_off = bar_size >> 1;
1307 		} else if (XEON_B2B_MIN_SIZE <= bar_size) {
1308 			dev_dbg(&pdev->dev, "b2b using whole bar\n");
1309 			ndev->b2b_off = 0;
1310 			--ndev->mw_count;
1311 		} else {
1312 			dev_dbg(&pdev->dev, "b2b bar size is too small\n");
1313 			return -EIO;
1314 		}
1315 	}
1316 
1317 	/* Reset the secondary bar sizes to match the primary bar sizes,
1318 	 * except disable or halve the size of the b2b secondary bar.
1319 	 *
1320 	 * Note: code for each specific bar size register, because the register
1321 	 * offsets are not in a consistent order (bar5sz comes after ppd, odd).
1322 	 */
1323 	pci_read_config_byte(pdev, XEON_PBAR23SZ_OFFSET, &bar_sz);
1324 	dev_dbg(&pdev->dev, "PBAR23SZ %#x\n", bar_sz);
1325 	if (b2b_bar == 2) {
1326 		if (ndev->b2b_off)
1327 			bar_sz -= 1;
1328 		else
1329 			bar_sz = 0;
1330 	}
1331 	pci_write_config_byte(pdev, XEON_SBAR23SZ_OFFSET, bar_sz);
1332 	pci_read_config_byte(pdev, XEON_SBAR23SZ_OFFSET, &bar_sz);
1333 	dev_dbg(&pdev->dev, "SBAR23SZ %#x\n", bar_sz);
1334 
1335 	if (!ndev->bar4_split) {
1336 		pci_read_config_byte(pdev, XEON_PBAR45SZ_OFFSET, &bar_sz);
1337 		dev_dbg(&pdev->dev, "PBAR45SZ %#x\n", bar_sz);
1338 		if (b2b_bar == 4) {
1339 			if (ndev->b2b_off)
1340 				bar_sz -= 1;
1341 			else
1342 				bar_sz = 0;
1343 		}
1344 		pci_write_config_byte(pdev, XEON_SBAR45SZ_OFFSET, bar_sz);
1345 		pci_read_config_byte(pdev, XEON_SBAR45SZ_OFFSET, &bar_sz);
1346 		dev_dbg(&pdev->dev, "SBAR45SZ %#x\n", bar_sz);
1347 	} else {
1348 		pci_read_config_byte(pdev, XEON_PBAR4SZ_OFFSET, &bar_sz);
1349 		dev_dbg(&pdev->dev, "PBAR4SZ %#x\n", bar_sz);
1350 		if (b2b_bar == 4) {
1351 			if (ndev->b2b_off)
1352 				bar_sz -= 1;
1353 			else
1354 				bar_sz = 0;
1355 		}
1356 		pci_write_config_byte(pdev, XEON_SBAR4SZ_OFFSET, bar_sz);
1357 		pci_read_config_byte(pdev, XEON_SBAR4SZ_OFFSET, &bar_sz);
1358 		dev_dbg(&pdev->dev, "SBAR4SZ %#x\n", bar_sz);
1359 
1360 		pci_read_config_byte(pdev, XEON_PBAR5SZ_OFFSET, &bar_sz);
1361 		dev_dbg(&pdev->dev, "PBAR5SZ %#x\n", bar_sz);
1362 		if (b2b_bar == 5) {
1363 			if (ndev->b2b_off)
1364 				bar_sz -= 1;
1365 			else
1366 				bar_sz = 0;
1367 		}
1368 		pci_write_config_byte(pdev, XEON_SBAR5SZ_OFFSET, bar_sz);
1369 		pci_read_config_byte(pdev, XEON_SBAR5SZ_OFFSET, &bar_sz);
1370 		dev_dbg(&pdev->dev, "SBAR5SZ %#x\n", bar_sz);
1371 	}
1372 
1373 	/* SBAR01 hit by first part of the b2b bar */
1374 	if (b2b_bar == 0)
1375 		bar_addr = addr->bar0_addr;
1376 	else if (b2b_bar == 2)
1377 		bar_addr = addr->bar2_addr64;
1378 	else if (b2b_bar == 4 && !ndev->bar4_split)
1379 		bar_addr = addr->bar4_addr64;
1380 	else if (b2b_bar == 4)
1381 		bar_addr = addr->bar4_addr32;
1382 	else if (b2b_bar == 5)
1383 		bar_addr = addr->bar5_addr32;
1384 	else
1385 		return -EIO;
1386 
1387 	dev_dbg(&pdev->dev, "SBAR01 %#018llx\n", bar_addr);
1388 	iowrite64(bar_addr, mmio + XEON_SBAR0BASE_OFFSET);
1389 
1390 	/* Other SBAR are normally hit by the PBAR xlat, except for b2b bar.
1391 	 * The b2b bar is either disabled above, or configured half-size, and
1392 	 * it starts at the PBAR xlat + offset.
1393 	 */
1394 
1395 	bar_addr = addr->bar2_addr64 + (b2b_bar == 2 ? ndev->b2b_off : 0);
1396 	iowrite64(bar_addr, mmio + XEON_SBAR23BASE_OFFSET);
1397 	bar_addr = ioread64(mmio + XEON_SBAR23BASE_OFFSET);
1398 	dev_dbg(&pdev->dev, "SBAR23 %#018llx\n", bar_addr);
1399 
1400 	if (!ndev->bar4_split) {
1401 		bar_addr = addr->bar4_addr64 +
1402 			(b2b_bar == 4 ? ndev->b2b_off : 0);
1403 		iowrite64(bar_addr, mmio + XEON_SBAR45BASE_OFFSET);
1404 		bar_addr = ioread64(mmio + XEON_SBAR45BASE_OFFSET);
1405 		dev_dbg(&pdev->dev, "SBAR45 %#018llx\n", bar_addr);
1406 	} else {
1407 		bar_addr = addr->bar4_addr32 +
1408 			(b2b_bar == 4 ? ndev->b2b_off : 0);
1409 		iowrite32(bar_addr, mmio + XEON_SBAR4BASE_OFFSET);
1410 		bar_addr = ioread32(mmio + XEON_SBAR4BASE_OFFSET);
1411 		dev_dbg(&pdev->dev, "SBAR4 %#010llx\n", bar_addr);
1412 
1413 		bar_addr = addr->bar5_addr32 +
1414 			(b2b_bar == 5 ? ndev->b2b_off : 0);
1415 		iowrite32(bar_addr, mmio + XEON_SBAR5BASE_OFFSET);
1416 		bar_addr = ioread32(mmio + XEON_SBAR5BASE_OFFSET);
1417 		dev_dbg(&pdev->dev, "SBAR5 %#010llx\n", bar_addr);
1418 	}
1419 
1420 	/* setup incoming bar limits == base addrs (zero length windows) */
1421 
1422 	bar_addr = addr->bar2_addr64 + (b2b_bar == 2 ? ndev->b2b_off : 0);
1423 	iowrite64(bar_addr, mmio + XEON_SBAR23LMT_OFFSET);
1424 	bar_addr = ioread64(mmio + XEON_SBAR23LMT_OFFSET);
1425 	dev_dbg(&pdev->dev, "SBAR23LMT %#018llx\n", bar_addr);
1426 
1427 	if (!ndev->bar4_split) {
1428 		bar_addr = addr->bar4_addr64 +
1429 			(b2b_bar == 4 ? ndev->b2b_off : 0);
1430 		iowrite64(bar_addr, mmio + XEON_SBAR45LMT_OFFSET);
1431 		bar_addr = ioread64(mmio + XEON_SBAR45LMT_OFFSET);
1432 		dev_dbg(&pdev->dev, "SBAR45LMT %#018llx\n", bar_addr);
1433 	} else {
1434 		bar_addr = addr->bar4_addr32 +
1435 			(b2b_bar == 4 ? ndev->b2b_off : 0);
1436 		iowrite32(bar_addr, mmio + XEON_SBAR4LMT_OFFSET);
1437 		bar_addr = ioread32(mmio + XEON_SBAR4LMT_OFFSET);
1438 		dev_dbg(&pdev->dev, "SBAR4LMT %#010llx\n", bar_addr);
1439 
1440 		bar_addr = addr->bar5_addr32 +
1441 			(b2b_bar == 5 ? ndev->b2b_off : 0);
1442 		iowrite32(bar_addr, mmio + XEON_SBAR5LMT_OFFSET);
1443 		bar_addr = ioread32(mmio + XEON_SBAR5LMT_OFFSET);
1444 		dev_dbg(&pdev->dev, "SBAR5LMT %#05llx\n", bar_addr);
1445 	}
1446 
1447 	/* zero incoming translation addrs */
1448 	iowrite64(0, mmio + XEON_SBAR23XLAT_OFFSET);
1449 
1450 	if (!ndev->bar4_split) {
1451 		iowrite64(0, mmio + XEON_SBAR45XLAT_OFFSET);
1452 	} else {
1453 		iowrite32(0, mmio + XEON_SBAR4XLAT_OFFSET);
1454 		iowrite32(0, mmio + XEON_SBAR5XLAT_OFFSET);
1455 	}
1456 
1457 	/* zero outgoing translation limits (whole bar size windows) */
1458 	iowrite64(0, mmio + XEON_PBAR23LMT_OFFSET);
1459 	if (!ndev->bar4_split) {
1460 		iowrite64(0, mmio + XEON_PBAR45LMT_OFFSET);
1461 	} else {
1462 		iowrite32(0, mmio + XEON_PBAR4LMT_OFFSET);
1463 		iowrite32(0, mmio + XEON_PBAR5LMT_OFFSET);
1464 	}
1465 
1466 	/* set outgoing translation offsets */
1467 	bar_addr = peer_addr->bar2_addr64;
1468 	iowrite64(bar_addr, mmio + XEON_PBAR23XLAT_OFFSET);
1469 	bar_addr = ioread64(mmio + XEON_PBAR23XLAT_OFFSET);
1470 	dev_dbg(&pdev->dev, "PBAR23XLAT %#018llx\n", bar_addr);
1471 
1472 	if (!ndev->bar4_split) {
1473 		bar_addr = peer_addr->bar4_addr64;
1474 		iowrite64(bar_addr, mmio + XEON_PBAR45XLAT_OFFSET);
1475 		bar_addr = ioread64(mmio + XEON_PBAR45XLAT_OFFSET);
1476 		dev_dbg(&pdev->dev, "PBAR45XLAT %#018llx\n", bar_addr);
1477 	} else {
1478 		bar_addr = peer_addr->bar4_addr32;
1479 		iowrite32(bar_addr, mmio + XEON_PBAR4XLAT_OFFSET);
1480 		bar_addr = ioread32(mmio + XEON_PBAR4XLAT_OFFSET);
1481 		dev_dbg(&pdev->dev, "PBAR4XLAT %#010llx\n", bar_addr);
1482 
1483 		bar_addr = peer_addr->bar5_addr32;
1484 		iowrite32(bar_addr, mmio + XEON_PBAR5XLAT_OFFSET);
1485 		bar_addr = ioread32(mmio + XEON_PBAR5XLAT_OFFSET);
1486 		dev_dbg(&pdev->dev, "PBAR5XLAT %#010llx\n", bar_addr);
1487 	}
1488 
1489 	/* set the translation offset for b2b registers */
1490 	if (b2b_bar == 0)
1491 		bar_addr = peer_addr->bar0_addr;
1492 	else if (b2b_bar == 2)
1493 		bar_addr = peer_addr->bar2_addr64;
1494 	else if (b2b_bar == 4 && !ndev->bar4_split)
1495 		bar_addr = peer_addr->bar4_addr64;
1496 	else if (b2b_bar == 4)
1497 		bar_addr = peer_addr->bar4_addr32;
1498 	else if (b2b_bar == 5)
1499 		bar_addr = peer_addr->bar5_addr32;
1500 	else
1501 		return -EIO;
1502 
1503 	/* B2B_XLAT_OFFSET is 64bit, but can only take 32bit writes */
1504 	dev_dbg(&pdev->dev, "B2BXLAT %#018llx\n", bar_addr);
1505 	iowrite32(bar_addr, mmio + XEON_B2B_XLAT_OFFSETL);
1506 	iowrite32(bar_addr >> 32, mmio + XEON_B2B_XLAT_OFFSETU);
1507 
1508 	if (b2b_bar) {
1509 		/* map peer ntb mmio config space registers */
1510 		ndev->peer_mmio = pci_iomap(pdev, b2b_bar,
1511 					    XEON_B2B_MIN_SIZE);
1512 		if (!ndev->peer_mmio)
1513 			return -EIO;
1514 
1515 		ndev->peer_addr = pci_resource_start(pdev, b2b_bar);
1516 	}
1517 
1518 	return 0;
1519 }
1520 
1521 static int xeon_init_ntb(struct intel_ntb_dev *ndev)
1522 {
1523 	struct device *dev = &ndev->ntb.pdev->dev;
1524 	int rc;
1525 	u32 ntb_ctl;
1526 
1527 	if (ndev->bar4_split)
1528 		ndev->mw_count = HSX_SPLIT_BAR_MW_COUNT;
1529 	else
1530 		ndev->mw_count = XEON_MW_COUNT;
1531 
1532 	ndev->spad_count = XEON_SPAD_COUNT;
1533 	ndev->db_count = XEON_DB_COUNT;
1534 	ndev->db_link_mask = XEON_DB_LINK_BIT;
1535 
1536 	switch (ndev->ntb.topo) {
1537 	case NTB_TOPO_PRI:
1538 		if (ndev->hwerr_flags & NTB_HWERR_SDOORBELL_LOCKUP) {
1539 			dev_err(dev, "NTB Primary config disabled\n");
1540 			return -EINVAL;
1541 		}
1542 
1543 		/* enable link to allow secondary side device to appear */
1544 		ntb_ctl = ioread32(ndev->self_mmio + ndev->reg->ntb_ctl);
1545 		ntb_ctl &= ~NTB_CTL_DISABLE;
1546 		iowrite32(ntb_ctl, ndev->self_mmio + ndev->reg->ntb_ctl);
1547 
1548 		/* use half the spads for the peer */
1549 		ndev->spad_count >>= 1;
1550 		ndev->self_reg = &xeon_pri_reg;
1551 		ndev->peer_reg = &xeon_sec_reg;
1552 		ndev->xlat_reg = &xeon_sec_xlat;
1553 		break;
1554 
1555 	case NTB_TOPO_SEC:
1556 		if (ndev->hwerr_flags & NTB_HWERR_SDOORBELL_LOCKUP) {
1557 			dev_err(dev, "NTB Secondary config disabled\n");
1558 			return -EINVAL;
1559 		}
1560 		/* use half the spads for the peer */
1561 		ndev->spad_count >>= 1;
1562 		ndev->self_reg = &xeon_sec_reg;
1563 		ndev->peer_reg = &xeon_pri_reg;
1564 		ndev->xlat_reg = &xeon_pri_xlat;
1565 		break;
1566 
1567 	case NTB_TOPO_B2B_USD:
1568 	case NTB_TOPO_B2B_DSD:
1569 		ndev->self_reg = &xeon_pri_reg;
1570 		ndev->peer_reg = &xeon_b2b_reg;
1571 		ndev->xlat_reg = &xeon_sec_xlat;
1572 
1573 		if (ndev->hwerr_flags & NTB_HWERR_SDOORBELL_LOCKUP) {
1574 			ndev->peer_reg = &xeon_pri_reg;
1575 
1576 			if (b2b_mw_idx < 0)
1577 				ndev->b2b_idx = b2b_mw_idx + ndev->mw_count;
1578 			else
1579 				ndev->b2b_idx = b2b_mw_idx;
1580 
1581 			if (ndev->b2b_idx >= ndev->mw_count) {
1582 				dev_dbg(dev,
1583 					"b2b_mw_idx %d invalid for mw_count %u\n",
1584 					b2b_mw_idx, ndev->mw_count);
1585 				return -EINVAL;
1586 			}
1587 
1588 			dev_dbg(dev, "setting up b2b mw idx %d means %d\n",
1589 				b2b_mw_idx, ndev->b2b_idx);
1590 
1591 		} else if (ndev->hwerr_flags & NTB_HWERR_B2BDOORBELL_BIT14) {
1592 			dev_warn(dev, "Reduce doorbell count by 1\n");
1593 			ndev->db_count -= 1;
1594 		}
1595 
1596 		if (ndev->ntb.topo == NTB_TOPO_B2B_USD) {
1597 			rc = xeon_setup_b2b_mw(ndev,
1598 					       &xeon_b2b_dsd_addr,
1599 					       &xeon_b2b_usd_addr);
1600 		} else {
1601 			rc = xeon_setup_b2b_mw(ndev,
1602 					       &xeon_b2b_usd_addr,
1603 					       &xeon_b2b_dsd_addr);
1604 		}
1605 		if (rc)
1606 			return rc;
1607 
1608 		/* Enable Bus Master and Memory Space on the secondary side */
1609 		iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
1610 			  ndev->self_mmio + XEON_SPCICMD_OFFSET);
1611 
1612 		break;
1613 
1614 	default:
1615 		return -EINVAL;
1616 	}
1617 
1618 	ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
1619 
1620 	ndev->reg->db_iowrite(ndev->db_valid_mask,
1621 			      ndev->self_mmio +
1622 			      ndev->self_reg->db_mask);
1623 
1624 	return 0;
1625 }
1626 
1627 static int xeon_init_dev(struct intel_ntb_dev *ndev)
1628 {
1629 	struct pci_dev *pdev;
1630 	u8 ppd;
1631 	int rc, mem;
1632 
1633 	pdev = ndev->ntb.pdev;
1634 
1635 	switch (pdev->device) {
1636 	/* There is a Xeon hardware errata related to writes to SDOORBELL or
1637 	 * B2BDOORBELL in conjunction with inbound access to NTB MMIO Space,
1638 	 * which may hang the system.  To workaround this use the second memory
1639 	 * window to access the interrupt and scratch pad registers on the
1640 	 * remote system.
1641 	 */
1642 	case PCI_DEVICE_ID_INTEL_NTB_SS_JSF:
1643 	case PCI_DEVICE_ID_INTEL_NTB_PS_JSF:
1644 	case PCI_DEVICE_ID_INTEL_NTB_B2B_JSF:
1645 	case PCI_DEVICE_ID_INTEL_NTB_SS_SNB:
1646 	case PCI_DEVICE_ID_INTEL_NTB_PS_SNB:
1647 	case PCI_DEVICE_ID_INTEL_NTB_B2B_SNB:
1648 	case PCI_DEVICE_ID_INTEL_NTB_SS_IVT:
1649 	case PCI_DEVICE_ID_INTEL_NTB_PS_IVT:
1650 	case PCI_DEVICE_ID_INTEL_NTB_B2B_IVT:
1651 	case PCI_DEVICE_ID_INTEL_NTB_SS_HSX:
1652 	case PCI_DEVICE_ID_INTEL_NTB_PS_HSX:
1653 	case PCI_DEVICE_ID_INTEL_NTB_B2B_HSX:
1654 	case PCI_DEVICE_ID_INTEL_NTB_SS_BDX:
1655 	case PCI_DEVICE_ID_INTEL_NTB_PS_BDX:
1656 	case PCI_DEVICE_ID_INTEL_NTB_B2B_BDX:
1657 		ndev->hwerr_flags |= NTB_HWERR_SDOORBELL_LOCKUP;
1658 		break;
1659 	}
1660 
1661 	switch (pdev->device) {
1662 	/* There is a hardware errata related to accessing any register in
1663 	 * SB01BASE in the presence of bidirectional traffic crossing the NTB.
1664 	 */
1665 	case PCI_DEVICE_ID_INTEL_NTB_SS_IVT:
1666 	case PCI_DEVICE_ID_INTEL_NTB_PS_IVT:
1667 	case PCI_DEVICE_ID_INTEL_NTB_B2B_IVT:
1668 	case PCI_DEVICE_ID_INTEL_NTB_SS_HSX:
1669 	case PCI_DEVICE_ID_INTEL_NTB_PS_HSX:
1670 	case PCI_DEVICE_ID_INTEL_NTB_B2B_HSX:
1671 	case PCI_DEVICE_ID_INTEL_NTB_SS_BDX:
1672 	case PCI_DEVICE_ID_INTEL_NTB_PS_BDX:
1673 	case PCI_DEVICE_ID_INTEL_NTB_B2B_BDX:
1674 		ndev->hwerr_flags |= NTB_HWERR_SB01BASE_LOCKUP;
1675 		break;
1676 	}
1677 
1678 	switch (pdev->device) {
1679 	/* HW Errata on bit 14 of b2bdoorbell register.  Writes will not be
1680 	 * mirrored to the remote system.  Shrink the number of bits by one,
1681 	 * since bit 14 is the last bit.
1682 	 */
1683 	case PCI_DEVICE_ID_INTEL_NTB_SS_JSF:
1684 	case PCI_DEVICE_ID_INTEL_NTB_PS_JSF:
1685 	case PCI_DEVICE_ID_INTEL_NTB_B2B_JSF:
1686 	case PCI_DEVICE_ID_INTEL_NTB_SS_SNB:
1687 	case PCI_DEVICE_ID_INTEL_NTB_PS_SNB:
1688 	case PCI_DEVICE_ID_INTEL_NTB_B2B_SNB:
1689 	case PCI_DEVICE_ID_INTEL_NTB_SS_IVT:
1690 	case PCI_DEVICE_ID_INTEL_NTB_PS_IVT:
1691 	case PCI_DEVICE_ID_INTEL_NTB_B2B_IVT:
1692 	case PCI_DEVICE_ID_INTEL_NTB_SS_HSX:
1693 	case PCI_DEVICE_ID_INTEL_NTB_PS_HSX:
1694 	case PCI_DEVICE_ID_INTEL_NTB_B2B_HSX:
1695 	case PCI_DEVICE_ID_INTEL_NTB_SS_BDX:
1696 	case PCI_DEVICE_ID_INTEL_NTB_PS_BDX:
1697 	case PCI_DEVICE_ID_INTEL_NTB_B2B_BDX:
1698 		ndev->hwerr_flags |= NTB_HWERR_B2BDOORBELL_BIT14;
1699 		break;
1700 	}
1701 
1702 	ndev->reg = &xeon_reg;
1703 
1704 	rc = pci_read_config_byte(pdev, XEON_PPD_OFFSET, &ppd);
1705 	if (rc)
1706 		return -EIO;
1707 
1708 	ndev->ntb.topo = xeon_ppd_topo(ndev, ppd);
1709 	dev_dbg(&pdev->dev, "ppd %#x topo %s\n", ppd,
1710 		ntb_topo_string(ndev->ntb.topo));
1711 	if (ndev->ntb.topo == NTB_TOPO_NONE)
1712 		return -EINVAL;
1713 
1714 	if (ndev->ntb.topo != NTB_TOPO_SEC) {
1715 		ndev->bar4_split = xeon_ppd_bar4_split(ndev, ppd);
1716 		dev_dbg(&pdev->dev, "ppd %#x bar4_split %d\n",
1717 			ppd, ndev->bar4_split);
1718 	} else {
1719 		/* This is a way for transparent BAR to figure out if we are
1720 		 * doing split BAR or not. There is no way for the hw on the
1721 		 * transparent side to know and set the PPD.
1722 		 */
1723 		mem = pci_select_bars(pdev, IORESOURCE_MEM);
1724 		ndev->bar4_split = hweight32(mem) ==
1725 			HSX_SPLIT_BAR_MW_COUNT + 1;
1726 		dev_dbg(&pdev->dev, "mem %#x bar4_split %d\n",
1727 			mem, ndev->bar4_split);
1728 	}
1729 
1730 	rc = xeon_init_ntb(ndev);
1731 	if (rc)
1732 		return rc;
1733 
1734 	return xeon_init_isr(ndev);
1735 }
1736 
1737 static void xeon_deinit_dev(struct intel_ntb_dev *ndev)
1738 {
1739 	xeon_deinit_isr(ndev);
1740 }
1741 
1742 static int intel_ntb_init_pci(struct intel_ntb_dev *ndev, struct pci_dev *pdev)
1743 {
1744 	int rc;
1745 
1746 	pci_set_drvdata(pdev, ndev);
1747 
1748 	rc = pci_enable_device(pdev);
1749 	if (rc)
1750 		goto err_pci_enable;
1751 
1752 	rc = pci_request_regions(pdev, NTB_NAME);
1753 	if (rc)
1754 		goto err_pci_regions;
1755 
1756 	pci_set_master(pdev);
1757 
1758 	rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1759 	if (rc) {
1760 		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1761 		if (rc)
1762 			goto err_dma_mask;
1763 		dev_warn(&pdev->dev, "Cannot DMA highmem\n");
1764 	}
1765 
1766 	rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
1767 	if (rc) {
1768 		rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1769 		if (rc)
1770 			goto err_dma_mask;
1771 		dev_warn(&pdev->dev, "Cannot DMA consistent highmem\n");
1772 	}
1773 	rc = dma_coerce_mask_and_coherent(&ndev->ntb.dev,
1774 					  dma_get_mask(&pdev->dev));
1775 	if (rc)
1776 		goto err_dma_mask;
1777 
1778 	ndev->self_mmio = pci_iomap(pdev, 0, 0);
1779 	if (!ndev->self_mmio) {
1780 		rc = -EIO;
1781 		goto err_mmio;
1782 	}
1783 	ndev->peer_mmio = ndev->self_mmio;
1784 	ndev->peer_addr = pci_resource_start(pdev, 0);
1785 
1786 	return 0;
1787 
1788 err_mmio:
1789 err_dma_mask:
1790 	pci_clear_master(pdev);
1791 	pci_release_regions(pdev);
1792 err_pci_regions:
1793 	pci_disable_device(pdev);
1794 err_pci_enable:
1795 	pci_set_drvdata(pdev, NULL);
1796 	return rc;
1797 }
1798 
1799 static void intel_ntb_deinit_pci(struct intel_ntb_dev *ndev)
1800 {
1801 	struct pci_dev *pdev = ndev->ntb.pdev;
1802 
1803 	if (ndev->peer_mmio && ndev->peer_mmio != ndev->self_mmio)
1804 		pci_iounmap(pdev, ndev->peer_mmio);
1805 	pci_iounmap(pdev, ndev->self_mmio);
1806 
1807 	pci_clear_master(pdev);
1808 	pci_release_regions(pdev);
1809 	pci_disable_device(pdev);
1810 	pci_set_drvdata(pdev, NULL);
1811 }
1812 
1813 static inline void ndev_init_struct(struct intel_ntb_dev *ndev,
1814 				    struct pci_dev *pdev)
1815 {
1816 	ndev->ntb.pdev = pdev;
1817 	ndev->ntb.topo = NTB_TOPO_NONE;
1818 	ndev->ntb.ops = &intel_ntb_ops;
1819 
1820 	ndev->b2b_off = 0;
1821 	ndev->b2b_idx = UINT_MAX;
1822 
1823 	ndev->bar4_split = 0;
1824 
1825 	ndev->mw_count = 0;
1826 	ndev->spad_count = 0;
1827 	ndev->db_count = 0;
1828 	ndev->db_vec_count = 0;
1829 	ndev->db_vec_shift = 0;
1830 
1831 	ndev->ntb_ctl = 0;
1832 	ndev->lnk_sta = 0;
1833 
1834 	ndev->db_valid_mask = 0;
1835 	ndev->db_link_mask = 0;
1836 	ndev->db_mask = 0;
1837 
1838 	spin_lock_init(&ndev->db_mask_lock);
1839 }
1840 
1841 static int intel_ntb_pci_probe(struct pci_dev *pdev,
1842 			       const struct pci_device_id *id)
1843 {
1844 	struct intel_ntb_dev *ndev;
1845 	int rc, node;
1846 
1847 	node = dev_to_node(&pdev->dev);
1848 
1849 	if (pdev_is_gen1(pdev)) {
1850 		ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
1851 		if (!ndev) {
1852 			rc = -ENOMEM;
1853 			goto err_ndev;
1854 		}
1855 
1856 		ndev_init_struct(ndev, pdev);
1857 
1858 		rc = intel_ntb_init_pci(ndev, pdev);
1859 		if (rc)
1860 			goto err_init_pci;
1861 
1862 		rc = xeon_init_dev(ndev);
1863 		if (rc)
1864 			goto err_init_dev;
1865 
1866 	} else if (pdev_is_gen3(pdev)) {
1867 		ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
1868 		if (!ndev) {
1869 			rc = -ENOMEM;
1870 			goto err_ndev;
1871 		}
1872 
1873 		ndev_init_struct(ndev, pdev);
1874 		ndev->ntb.ops = &intel_ntb3_ops;
1875 
1876 		rc = intel_ntb_init_pci(ndev, pdev);
1877 		if (rc)
1878 			goto err_init_pci;
1879 
1880 		rc = gen3_init_dev(ndev);
1881 		if (rc)
1882 			goto err_init_dev;
1883 
1884 	} else {
1885 		rc = -EINVAL;
1886 		goto err_ndev;
1887 	}
1888 
1889 	ndev_reset_unsafe_flags(ndev);
1890 
1891 	ndev->reg->poll_link(ndev);
1892 
1893 	ndev_init_debugfs(ndev);
1894 
1895 	rc = ntb_register_device(&ndev->ntb);
1896 	if (rc)
1897 		goto err_register;
1898 
1899 	dev_info(&pdev->dev, "NTB device registered.\n");
1900 
1901 	return 0;
1902 
1903 err_register:
1904 	ndev_deinit_debugfs(ndev);
1905 	if (pdev_is_gen1(pdev) || pdev_is_gen3(pdev))
1906 		xeon_deinit_dev(ndev);
1907 err_init_dev:
1908 	intel_ntb_deinit_pci(ndev);
1909 err_init_pci:
1910 	kfree(ndev);
1911 err_ndev:
1912 	return rc;
1913 }
1914 
1915 static void intel_ntb_pci_remove(struct pci_dev *pdev)
1916 {
1917 	struct intel_ntb_dev *ndev = pci_get_drvdata(pdev);
1918 
1919 	ntb_unregister_device(&ndev->ntb);
1920 	ndev_deinit_debugfs(ndev);
1921 	if (pdev_is_gen1(pdev) || pdev_is_gen3(pdev))
1922 		xeon_deinit_dev(ndev);
1923 	intel_ntb_deinit_pci(ndev);
1924 	kfree(ndev);
1925 }
1926 
1927 static const struct intel_ntb_reg xeon_reg = {
1928 	.poll_link		= xeon_poll_link,
1929 	.link_is_up		= xeon_link_is_up,
1930 	.db_ioread		= xeon_db_ioread,
1931 	.db_iowrite		= xeon_db_iowrite,
1932 	.db_size		= sizeof(u32),
1933 	.ntb_ctl		= XEON_NTBCNTL_OFFSET,
1934 	.mw_bar			= {2, 4, 5},
1935 };
1936 
1937 static const struct intel_ntb_alt_reg xeon_pri_reg = {
1938 	.db_bell		= XEON_PDOORBELL_OFFSET,
1939 	.db_mask		= XEON_PDBMSK_OFFSET,
1940 	.spad			= XEON_SPAD_OFFSET,
1941 };
1942 
1943 static const struct intel_ntb_alt_reg xeon_sec_reg = {
1944 	.db_bell		= XEON_SDOORBELL_OFFSET,
1945 	.db_mask		= XEON_SDBMSK_OFFSET,
1946 	/* second half of the scratchpads */
1947 	.spad			= XEON_SPAD_OFFSET + (XEON_SPAD_COUNT << 1),
1948 };
1949 
1950 static const struct intel_ntb_alt_reg xeon_b2b_reg = {
1951 	.db_bell		= XEON_B2B_DOORBELL_OFFSET,
1952 	.spad			= XEON_B2B_SPAD_OFFSET,
1953 };
1954 
1955 static const struct intel_ntb_xlat_reg xeon_pri_xlat = {
1956 	/* Note: no primary .bar0_base visible to the secondary side.
1957 	 *
1958 	 * The secondary side cannot get the base address stored in primary
1959 	 * bars.  The base address is necessary to set the limit register to
1960 	 * any value other than zero, or unlimited.
1961 	 *
1962 	 * WITHOUT THE BASE ADDRESS, THE SECONDARY SIDE CANNOT DISABLE the
1963 	 * window by setting the limit equal to base, nor can it limit the size
1964 	 * of the memory window by setting the limit to base + size.
1965 	 */
1966 	.bar2_limit		= XEON_PBAR23LMT_OFFSET,
1967 	.bar2_xlat		= XEON_PBAR23XLAT_OFFSET,
1968 };
1969 
1970 static const struct intel_ntb_xlat_reg xeon_sec_xlat = {
1971 	.bar0_base		= XEON_SBAR0BASE_OFFSET,
1972 	.bar2_limit		= XEON_SBAR23LMT_OFFSET,
1973 	.bar2_xlat		= XEON_SBAR23XLAT_OFFSET,
1974 };
1975 
1976 struct intel_b2b_addr xeon_b2b_usd_addr = {
1977 	.bar2_addr64		= XEON_B2B_BAR2_ADDR64,
1978 	.bar4_addr64		= XEON_B2B_BAR4_ADDR64,
1979 	.bar4_addr32		= XEON_B2B_BAR4_ADDR32,
1980 	.bar5_addr32		= XEON_B2B_BAR5_ADDR32,
1981 };
1982 
1983 struct intel_b2b_addr xeon_b2b_dsd_addr = {
1984 	.bar2_addr64		= XEON_B2B_BAR2_ADDR64,
1985 	.bar4_addr64		= XEON_B2B_BAR4_ADDR64,
1986 	.bar4_addr32		= XEON_B2B_BAR4_ADDR32,
1987 	.bar5_addr32		= XEON_B2B_BAR5_ADDR32,
1988 };
1989 
1990 /* operations for primary side of local ntb */
1991 static const struct ntb_dev_ops intel_ntb_ops = {
1992 	.mw_count		= intel_ntb_mw_count,
1993 	.mw_get_align		= intel_ntb_mw_get_align,
1994 	.mw_set_trans		= intel_ntb_mw_set_trans,
1995 	.peer_mw_count		= intel_ntb_peer_mw_count,
1996 	.peer_mw_get_addr	= intel_ntb_peer_mw_get_addr,
1997 	.link_is_up		= intel_ntb_link_is_up,
1998 	.link_enable		= intel_ntb_link_enable,
1999 	.link_disable		= intel_ntb_link_disable,
2000 	.db_is_unsafe		= intel_ntb_db_is_unsafe,
2001 	.db_valid_mask		= intel_ntb_db_valid_mask,
2002 	.db_vector_count	= intel_ntb_db_vector_count,
2003 	.db_vector_mask		= intel_ntb_db_vector_mask,
2004 	.db_read		= intel_ntb_db_read,
2005 	.db_clear		= intel_ntb_db_clear,
2006 	.db_set_mask		= intel_ntb_db_set_mask,
2007 	.db_clear_mask		= intel_ntb_db_clear_mask,
2008 	.peer_db_addr		= intel_ntb_peer_db_addr,
2009 	.peer_db_set		= intel_ntb_peer_db_set,
2010 	.spad_is_unsafe		= intel_ntb_spad_is_unsafe,
2011 	.spad_count		= intel_ntb_spad_count,
2012 	.spad_read		= intel_ntb_spad_read,
2013 	.spad_write		= intel_ntb_spad_write,
2014 	.peer_spad_addr		= intel_ntb_peer_spad_addr,
2015 	.peer_spad_read		= intel_ntb_peer_spad_read,
2016 	.peer_spad_write	= intel_ntb_peer_spad_write,
2017 };
2018 
2019 static const struct file_operations intel_ntb_debugfs_info = {
2020 	.owner = THIS_MODULE,
2021 	.open = simple_open,
2022 	.read = ndev_debugfs_read,
2023 };
2024 
2025 static const struct pci_device_id intel_ntb_pci_tbl[] = {
2026 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
2027 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
2028 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
2029 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_HSX)},
2030 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BDX)},
2031 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_PS_JSF)},
2032 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_PS_SNB)},
2033 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_PS_IVT)},
2034 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_PS_HSX)},
2035 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_PS_BDX)},
2036 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_SS_JSF)},
2037 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_SS_SNB)},
2038 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_SS_IVT)},
2039 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_SS_HSX)},
2040 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_SS_BDX)},
2041 	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SKX)},
2042 	{0}
2043 };
2044 MODULE_DEVICE_TABLE(pci, intel_ntb_pci_tbl);
2045 
2046 static struct pci_driver intel_ntb_pci_driver = {
2047 	.name = KBUILD_MODNAME,
2048 	.id_table = intel_ntb_pci_tbl,
2049 	.probe = intel_ntb_pci_probe,
2050 	.remove = intel_ntb_pci_remove,
2051 };
2052 
2053 static int __init intel_ntb_pci_driver_init(void)
2054 {
2055 	pr_info("%s %s\n", NTB_DESC, NTB_VER);
2056 
2057 	if (debugfs_initialized())
2058 		debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
2059 
2060 	return pci_register_driver(&intel_ntb_pci_driver);
2061 }
2062 module_init(intel_ntb_pci_driver_init);
2063 
2064 static void __exit intel_ntb_pci_driver_exit(void)
2065 {
2066 	pci_unregister_driver(&intel_ntb_pci_driver);
2067 
2068 	debugfs_remove_recursive(debugfs_dir);
2069 }
2070 module_exit(intel_ntb_pci_driver_exit);
2071