xref: /linux/arch/s390/pci/pci.c (revision 2eff01ee2881becc9daaa0d53477ec202136b1f4)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright IBM Corp. 2012
4  *
5  * Author(s):
6  *   Jan Glauber <jang@linux.vnet.ibm.com>
7  *
8  * The System z PCI code is a rewrite from a prototype by
9  * the following people (Kudoz!):
10  *   Alexander Schmidt
11  *   Christoph Raisch
12  *   Hannes Hering
13  *   Hoang-Nam Nguyen
14  *   Jan-Bernd Themann
15  *   Stefan Roscher
16  *   Thomas Klein
17  */
18 
19 #define KMSG_COMPONENT "zpci"
20 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
21 
22 #include <linux/kernel.h>
23 #include <linux/slab.h>
24 #include <linux/err.h>
25 #include <linux/export.h>
26 #include <linux/delay.h>
27 #include <linux/seq_file.h>
28 #include <linux/jump_label.h>
29 #include <linux/pci.h>
30 #include <linux/printk.h>
31 #include <linux/lockdep.h>
32 #include <linux/list_sort.h>
33 
34 #include <asm/isc.h>
35 #include <asm/airq.h>
36 #include <asm/facility.h>
37 #include <asm/pci_insn.h>
38 #include <asm/pci_clp.h>
39 #include <asm/pci_dma.h>
40 
41 #include "pci_bus.h"
42 #include "pci_iov.h"
43 
44 /* list of all detected zpci devices */
45 static LIST_HEAD(zpci_list);
46 static DEFINE_SPINLOCK(zpci_list_lock);
47 
48 static DECLARE_BITMAP(zpci_domain, ZPCI_DOMAIN_BITMAP_SIZE);
49 static DEFINE_SPINLOCK(zpci_domain_lock);
50 
51 #define ZPCI_IOMAP_ENTRIES						\
52 	min(((unsigned long) ZPCI_NR_DEVICES * PCI_STD_NUM_BARS / 2),	\
53 	    ZPCI_IOMAP_MAX_ENTRIES)
54 
55 unsigned int s390_pci_no_rid;
56 
57 static DEFINE_SPINLOCK(zpci_iomap_lock);
58 static unsigned long *zpci_iomap_bitmap;
59 struct zpci_iomap_entry *zpci_iomap_start;
60 EXPORT_SYMBOL_GPL(zpci_iomap_start);
61 
62 DEFINE_STATIC_KEY_FALSE(have_mio);
63 
64 static struct kmem_cache *zdev_fmb_cache;
65 
66 /* AEN structures that must be preserved over KVM module re-insertion */
67 union zpci_sic_iib *zpci_aipb;
68 EXPORT_SYMBOL_GPL(zpci_aipb);
69 struct airq_iv *zpci_aif_sbv;
70 EXPORT_SYMBOL_GPL(zpci_aif_sbv);
71 
72 struct zpci_dev *get_zdev_by_fid(u32 fid)
73 {
74 	struct zpci_dev *tmp, *zdev = NULL;
75 
76 	spin_lock(&zpci_list_lock);
77 	list_for_each_entry(tmp, &zpci_list, entry) {
78 		if (tmp->fid == fid) {
79 			zdev = tmp;
80 			zpci_zdev_get(zdev);
81 			break;
82 		}
83 	}
84 	spin_unlock(&zpci_list_lock);
85 	return zdev;
86 }
87 
88 void zpci_remove_reserved_devices(void)
89 {
90 	struct zpci_dev *tmp, *zdev;
91 	enum zpci_state state;
92 	LIST_HEAD(remove);
93 
94 	spin_lock(&zpci_list_lock);
95 	list_for_each_entry_safe(zdev, tmp, &zpci_list, entry) {
96 		if (zdev->state == ZPCI_FN_STATE_STANDBY &&
97 		    !clp_get_state(zdev->fid, &state) &&
98 		    state == ZPCI_FN_STATE_RESERVED)
99 			list_move_tail(&zdev->entry, &remove);
100 	}
101 	spin_unlock(&zpci_list_lock);
102 
103 	list_for_each_entry_safe(zdev, tmp, &remove, entry)
104 		zpci_device_reserved(zdev);
105 }
106 
107 int pci_domain_nr(struct pci_bus *bus)
108 {
109 	return ((struct zpci_bus *) bus->sysdata)->domain_nr;
110 }
111 EXPORT_SYMBOL_GPL(pci_domain_nr);
112 
113 int pci_proc_domain(struct pci_bus *bus)
114 {
115 	return pci_domain_nr(bus);
116 }
117 EXPORT_SYMBOL_GPL(pci_proc_domain);
118 
119 /* Modify PCI: Register I/O address translation parameters */
120 int zpci_register_ioat(struct zpci_dev *zdev, u8 dmaas,
121 		       u64 base, u64 limit, u64 iota, u8 *status)
122 {
123 	u64 req = ZPCI_CREATE_REQ(zdev->fh, dmaas, ZPCI_MOD_FC_REG_IOAT);
124 	struct zpci_fib fib = {0};
125 	u8 cc;
126 
127 	WARN_ON_ONCE(iota & 0x3fff);
128 	fib.pba = base;
129 	/* Work around off by one in ISM virt device */
130 	if (zdev->pft == PCI_FUNC_TYPE_ISM && limit > base)
131 		fib.pal = limit + (1 << 12);
132 	else
133 		fib.pal = limit;
134 	fib.iota = iota | ZPCI_IOTA_RTTO_FLAG;
135 	fib.gd = zdev->gisa;
136 	cc = zpci_mod_fc(req, &fib, status);
137 	if (cc)
138 		zpci_dbg(3, "reg ioat fid:%x, cc:%d, status:%d\n", zdev->fid, cc, *status);
139 	return cc;
140 }
141 EXPORT_SYMBOL_GPL(zpci_register_ioat);
142 
143 /* Modify PCI: Unregister I/O address translation parameters */
144 int zpci_unregister_ioat(struct zpci_dev *zdev, u8 dmaas)
145 {
146 	u64 req = ZPCI_CREATE_REQ(zdev->fh, dmaas, ZPCI_MOD_FC_DEREG_IOAT);
147 	struct zpci_fib fib = {0};
148 	u8 cc, status;
149 
150 	fib.gd = zdev->gisa;
151 
152 	cc = zpci_mod_fc(req, &fib, &status);
153 	if (cc)
154 		zpci_dbg(3, "unreg ioat fid:%x, cc:%d, status:%d\n", zdev->fid, cc, status);
155 	return cc;
156 }
157 
158 /* Modify PCI: Set PCI function measurement parameters */
159 int zpci_fmb_enable_device(struct zpci_dev *zdev)
160 {
161 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_SET_MEASURE);
162 	struct zpci_iommu_ctrs *ctrs;
163 	struct zpci_fib fib = {0};
164 	unsigned long flags;
165 	u8 cc, status;
166 
167 	if (zdev->fmb || sizeof(*zdev->fmb) < zdev->fmb_length)
168 		return -EINVAL;
169 
170 	zdev->fmb = kmem_cache_zalloc(zdev_fmb_cache, GFP_KERNEL);
171 	if (!zdev->fmb)
172 		return -ENOMEM;
173 	WARN_ON((u64) zdev->fmb & 0xf);
174 
175 	/* reset software counters */
176 	spin_lock_irqsave(&zdev->dom_lock, flags);
177 	ctrs = zpci_get_iommu_ctrs(zdev);
178 	if (ctrs) {
179 		atomic64_set(&ctrs->mapped_pages, 0);
180 		atomic64_set(&ctrs->unmapped_pages, 0);
181 		atomic64_set(&ctrs->global_rpcits, 0);
182 		atomic64_set(&ctrs->sync_map_rpcits, 0);
183 		atomic64_set(&ctrs->sync_rpcits, 0);
184 	}
185 	spin_unlock_irqrestore(&zdev->dom_lock, flags);
186 
187 
188 	fib.fmb_addr = virt_to_phys(zdev->fmb);
189 	fib.gd = zdev->gisa;
190 	cc = zpci_mod_fc(req, &fib, &status);
191 	if (cc) {
192 		kmem_cache_free(zdev_fmb_cache, zdev->fmb);
193 		zdev->fmb = NULL;
194 	}
195 	return cc ? -EIO : 0;
196 }
197 
198 /* Modify PCI: Disable PCI function measurement */
199 int zpci_fmb_disable_device(struct zpci_dev *zdev)
200 {
201 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_SET_MEASURE);
202 	struct zpci_fib fib = {0};
203 	u8 cc, status;
204 
205 	if (!zdev->fmb)
206 		return -EINVAL;
207 
208 	fib.gd = zdev->gisa;
209 
210 	/* Function measurement is disabled if fmb address is zero */
211 	cc = zpci_mod_fc(req, &fib, &status);
212 	if (cc == 3) /* Function already gone. */
213 		cc = 0;
214 
215 	if (!cc) {
216 		kmem_cache_free(zdev_fmb_cache, zdev->fmb);
217 		zdev->fmb = NULL;
218 	}
219 	return cc ? -EIO : 0;
220 }
221 
222 static int zpci_cfg_load(struct zpci_dev *zdev, int offset, u32 *val, u8 len)
223 {
224 	u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
225 	u64 data;
226 	int rc;
227 
228 	rc = __zpci_load(&data, req, offset);
229 	if (!rc) {
230 		data = le64_to_cpu((__force __le64) data);
231 		data >>= (8 - len) * 8;
232 		*val = (u32) data;
233 	} else
234 		*val = 0xffffffff;
235 	return rc;
236 }
237 
238 static int zpci_cfg_store(struct zpci_dev *zdev, int offset, u32 val, u8 len)
239 {
240 	u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
241 	u64 data = val;
242 	int rc;
243 
244 	data <<= (8 - len) * 8;
245 	data = (__force u64) cpu_to_le64(data);
246 	rc = __zpci_store(data, req, offset);
247 	return rc;
248 }
249 
250 resource_size_t pcibios_align_resource(void *data, const struct resource *res,
251 				       resource_size_t size,
252 				       resource_size_t align)
253 {
254 	return 0;
255 }
256 
257 void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
258 			   unsigned long prot)
259 {
260 	/*
261 	 * When PCI MIO instructions are unavailable the "physical" address
262 	 * encodes a hint for accessing the PCI memory space it represents.
263 	 * Just pass it unchanged such that ioread/iowrite can decode it.
264 	 */
265 	if (!static_branch_unlikely(&have_mio))
266 		return (void __iomem *)phys_addr;
267 
268 	return generic_ioremap_prot(phys_addr, size, __pgprot(prot));
269 }
270 EXPORT_SYMBOL(ioremap_prot);
271 
272 void iounmap(volatile void __iomem *addr)
273 {
274 	if (static_branch_likely(&have_mio))
275 		generic_iounmap(addr);
276 }
277 EXPORT_SYMBOL(iounmap);
278 
279 /* Create a virtual mapping cookie for a PCI BAR */
280 static void __iomem *pci_iomap_range_fh(struct pci_dev *pdev, int bar,
281 					unsigned long offset, unsigned long max)
282 {
283 	struct zpci_dev *zdev =	to_zpci(pdev);
284 	int idx;
285 
286 	idx = zdev->bars[bar].map_idx;
287 	spin_lock(&zpci_iomap_lock);
288 	/* Detect overrun */
289 	WARN_ON(!++zpci_iomap_start[idx].count);
290 	zpci_iomap_start[idx].fh = zdev->fh;
291 	zpci_iomap_start[idx].bar = bar;
292 	spin_unlock(&zpci_iomap_lock);
293 
294 	return (void __iomem *) ZPCI_ADDR(idx) + offset;
295 }
296 
297 static void __iomem *pci_iomap_range_mio(struct pci_dev *pdev, int bar,
298 					 unsigned long offset,
299 					 unsigned long max)
300 {
301 	unsigned long barsize = pci_resource_len(pdev, bar);
302 	struct zpci_dev *zdev = to_zpci(pdev);
303 	void __iomem *iova;
304 
305 	iova = ioremap((unsigned long) zdev->bars[bar].mio_wt, barsize);
306 	return iova ? iova + offset : iova;
307 }
308 
309 void __iomem *pci_iomap_range(struct pci_dev *pdev, int bar,
310 			      unsigned long offset, unsigned long max)
311 {
312 	if (bar >= PCI_STD_NUM_BARS || !pci_resource_len(pdev, bar))
313 		return NULL;
314 
315 	if (static_branch_likely(&have_mio))
316 		return pci_iomap_range_mio(pdev, bar, offset, max);
317 	else
318 		return pci_iomap_range_fh(pdev, bar, offset, max);
319 }
320 EXPORT_SYMBOL(pci_iomap_range);
321 
322 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
323 {
324 	return pci_iomap_range(dev, bar, 0, maxlen);
325 }
326 EXPORT_SYMBOL(pci_iomap);
327 
328 static void __iomem *pci_iomap_wc_range_mio(struct pci_dev *pdev, int bar,
329 					    unsigned long offset, unsigned long max)
330 {
331 	unsigned long barsize = pci_resource_len(pdev, bar);
332 	struct zpci_dev *zdev = to_zpci(pdev);
333 	void __iomem *iova;
334 
335 	iova = ioremap((unsigned long) zdev->bars[bar].mio_wb, barsize);
336 	return iova ? iova + offset : iova;
337 }
338 
339 void __iomem *pci_iomap_wc_range(struct pci_dev *pdev, int bar,
340 				 unsigned long offset, unsigned long max)
341 {
342 	if (bar >= PCI_STD_NUM_BARS || !pci_resource_len(pdev, bar))
343 		return NULL;
344 
345 	if (static_branch_likely(&have_mio))
346 		return pci_iomap_wc_range_mio(pdev, bar, offset, max);
347 	else
348 		return pci_iomap_range_fh(pdev, bar, offset, max);
349 }
350 EXPORT_SYMBOL(pci_iomap_wc_range);
351 
352 void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned long maxlen)
353 {
354 	return pci_iomap_wc_range(dev, bar, 0, maxlen);
355 }
356 EXPORT_SYMBOL(pci_iomap_wc);
357 
358 static void pci_iounmap_fh(struct pci_dev *pdev, void __iomem *addr)
359 {
360 	unsigned int idx = ZPCI_IDX(addr);
361 
362 	spin_lock(&zpci_iomap_lock);
363 	/* Detect underrun */
364 	WARN_ON(!zpci_iomap_start[idx].count);
365 	if (!--zpci_iomap_start[idx].count) {
366 		zpci_iomap_start[idx].fh = 0;
367 		zpci_iomap_start[idx].bar = 0;
368 	}
369 	spin_unlock(&zpci_iomap_lock);
370 }
371 
372 static void pci_iounmap_mio(struct pci_dev *pdev, void __iomem *addr)
373 {
374 	iounmap(addr);
375 }
376 
377 void pci_iounmap(struct pci_dev *pdev, void __iomem *addr)
378 {
379 	if (static_branch_likely(&have_mio))
380 		pci_iounmap_mio(pdev, addr);
381 	else
382 		pci_iounmap_fh(pdev, addr);
383 }
384 EXPORT_SYMBOL(pci_iounmap);
385 
386 static int pci_read(struct pci_bus *bus, unsigned int devfn, int where,
387 		    int size, u32 *val)
388 {
389 	struct zpci_dev *zdev = zdev_from_bus(bus, devfn);
390 
391 	return (zdev) ? zpci_cfg_load(zdev, where, val, size) : -ENODEV;
392 }
393 
394 static int pci_write(struct pci_bus *bus, unsigned int devfn, int where,
395 		     int size, u32 val)
396 {
397 	struct zpci_dev *zdev = zdev_from_bus(bus, devfn);
398 
399 	return (zdev) ? zpci_cfg_store(zdev, where, val, size) : -ENODEV;
400 }
401 
402 static struct pci_ops pci_root_ops = {
403 	.read = pci_read,
404 	.write = pci_write,
405 };
406 
407 static void zpci_map_resources(struct pci_dev *pdev)
408 {
409 	struct zpci_dev *zdev = to_zpci(pdev);
410 	resource_size_t len;
411 	int i;
412 
413 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
414 		len = pci_resource_len(pdev, i);
415 		if (!len)
416 			continue;
417 
418 		if (zpci_use_mio(zdev))
419 			pdev->resource[i].start =
420 				(resource_size_t __force) zdev->bars[i].mio_wt;
421 		else
422 			pdev->resource[i].start = (resource_size_t __force)
423 				pci_iomap_range_fh(pdev, i, 0, 0);
424 		pdev->resource[i].end = pdev->resource[i].start + len - 1;
425 	}
426 
427 	zpci_iov_map_resources(pdev);
428 }
429 
430 static void zpci_unmap_resources(struct pci_dev *pdev)
431 {
432 	struct zpci_dev *zdev = to_zpci(pdev);
433 	resource_size_t len;
434 	int i;
435 
436 	if (zpci_use_mio(zdev))
437 		return;
438 
439 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
440 		len = pci_resource_len(pdev, i);
441 		if (!len)
442 			continue;
443 		pci_iounmap_fh(pdev, (void __iomem __force *)
444 			       pdev->resource[i].start);
445 	}
446 }
447 
448 static int zpci_alloc_iomap(struct zpci_dev *zdev)
449 {
450 	unsigned long entry;
451 
452 	spin_lock(&zpci_iomap_lock);
453 	entry = find_first_zero_bit(zpci_iomap_bitmap, ZPCI_IOMAP_ENTRIES);
454 	if (entry == ZPCI_IOMAP_ENTRIES) {
455 		spin_unlock(&zpci_iomap_lock);
456 		return -ENOSPC;
457 	}
458 	set_bit(entry, zpci_iomap_bitmap);
459 	spin_unlock(&zpci_iomap_lock);
460 	return entry;
461 }
462 
463 static void zpci_free_iomap(struct zpci_dev *zdev, int entry)
464 {
465 	spin_lock(&zpci_iomap_lock);
466 	memset(&zpci_iomap_start[entry], 0, sizeof(struct zpci_iomap_entry));
467 	clear_bit(entry, zpci_iomap_bitmap);
468 	spin_unlock(&zpci_iomap_lock);
469 }
470 
471 static void zpci_do_update_iomap_fh(struct zpci_dev *zdev, u32 fh)
472 {
473 	int bar, idx;
474 
475 	spin_lock(&zpci_iomap_lock);
476 	for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
477 		if (!zdev->bars[bar].size)
478 			continue;
479 		idx = zdev->bars[bar].map_idx;
480 		if (!zpci_iomap_start[idx].count)
481 			continue;
482 		WRITE_ONCE(zpci_iomap_start[idx].fh, zdev->fh);
483 	}
484 	spin_unlock(&zpci_iomap_lock);
485 }
486 
487 void zpci_update_fh(struct zpci_dev *zdev, u32 fh)
488 {
489 	if (!fh || zdev->fh == fh)
490 		return;
491 
492 	zdev->fh = fh;
493 	if (zpci_use_mio(zdev))
494 		return;
495 	if (zdev->has_resources && zdev_enabled(zdev))
496 		zpci_do_update_iomap_fh(zdev, fh);
497 }
498 
499 static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,
500 				    unsigned long size, unsigned long flags)
501 {
502 	struct resource *r;
503 
504 	r = kzalloc(sizeof(*r), GFP_KERNEL);
505 	if (!r)
506 		return NULL;
507 
508 	r->start = start;
509 	r->end = r->start + size - 1;
510 	r->flags = flags;
511 	r->name = zdev->res_name;
512 
513 	if (request_resource(&iomem_resource, r)) {
514 		kfree(r);
515 		return NULL;
516 	}
517 	return r;
518 }
519 
520 int zpci_setup_bus_resources(struct zpci_dev *zdev)
521 {
522 	unsigned long addr, size, flags;
523 	struct resource *res;
524 	int i, entry;
525 
526 	snprintf(zdev->res_name, sizeof(zdev->res_name),
527 		 "PCI Bus %04x:%02x", zdev->uid, ZPCI_BUS_NR);
528 
529 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
530 		if (!zdev->bars[i].size)
531 			continue;
532 		entry = zpci_alloc_iomap(zdev);
533 		if (entry < 0)
534 			return entry;
535 		zdev->bars[i].map_idx = entry;
536 
537 		/* only MMIO is supported */
538 		flags = IORESOURCE_MEM;
539 		if (zdev->bars[i].val & 8)
540 			flags |= IORESOURCE_PREFETCH;
541 		if (zdev->bars[i].val & 4)
542 			flags |= IORESOURCE_MEM_64;
543 
544 		if (zpci_use_mio(zdev))
545 			addr = (unsigned long) zdev->bars[i].mio_wt;
546 		else
547 			addr = ZPCI_ADDR(entry);
548 		size = 1UL << zdev->bars[i].size;
549 
550 		res = __alloc_res(zdev, addr, size, flags);
551 		if (!res) {
552 			zpci_free_iomap(zdev, entry);
553 			return -ENOMEM;
554 		}
555 		zdev->bars[i].res = res;
556 	}
557 	zdev->has_resources = 1;
558 
559 	return 0;
560 }
561 
562 static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
563 {
564 	struct resource *res;
565 	int i;
566 
567 	pci_lock_rescan_remove();
568 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
569 		res = zdev->bars[i].res;
570 		if (!res)
571 			continue;
572 
573 		release_resource(res);
574 		pci_bus_remove_resource(zdev->zbus->bus, res);
575 		zpci_free_iomap(zdev, zdev->bars[i].map_idx);
576 		zdev->bars[i].res = NULL;
577 		kfree(res);
578 	}
579 	zdev->has_resources = 0;
580 	pci_unlock_rescan_remove();
581 }
582 
583 int pcibios_device_add(struct pci_dev *pdev)
584 {
585 	struct zpci_dev *zdev = to_zpci(pdev);
586 	struct resource *res;
587 	int i;
588 
589 	/* The pdev has a reference to the zdev via its bus */
590 	zpci_zdev_get(zdev);
591 	if (pdev->is_physfn)
592 		pdev->no_vf_scan = 1;
593 
594 	zpci_map_resources(pdev);
595 
596 	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
597 		res = &pdev->resource[i];
598 		if (res->parent || !res->flags)
599 			continue;
600 		pci_claim_resource(pdev, i);
601 	}
602 
603 	return 0;
604 }
605 
606 void pcibios_release_device(struct pci_dev *pdev)
607 {
608 	struct zpci_dev *zdev = to_zpci(pdev);
609 
610 	zpci_unmap_resources(pdev);
611 	zpci_zdev_put(zdev);
612 }
613 
614 int pcibios_enable_device(struct pci_dev *pdev, int mask)
615 {
616 	struct zpci_dev *zdev = to_zpci(pdev);
617 
618 	zpci_debug_init_device(zdev, dev_name(&pdev->dev));
619 	zpci_fmb_enable_device(zdev);
620 
621 	return pci_enable_resources(pdev, mask);
622 }
623 
624 void pcibios_disable_device(struct pci_dev *pdev)
625 {
626 	struct zpci_dev *zdev = to_zpci(pdev);
627 
628 	zpci_fmb_disable_device(zdev);
629 	zpci_debug_exit_device(zdev);
630 }
631 
632 static int __zpci_register_domain(int domain)
633 {
634 	spin_lock(&zpci_domain_lock);
635 	if (test_bit(domain, zpci_domain)) {
636 		spin_unlock(&zpci_domain_lock);
637 		pr_err("Domain %04x is already assigned\n", domain);
638 		return -EEXIST;
639 	}
640 	set_bit(domain, zpci_domain);
641 	spin_unlock(&zpci_domain_lock);
642 	return domain;
643 }
644 
645 static int __zpci_alloc_domain(void)
646 {
647 	int domain;
648 
649 	spin_lock(&zpci_domain_lock);
650 	/*
651 	 * We can always auto allocate domains below ZPCI_NR_DEVICES.
652 	 * There is either a free domain or we have reached the maximum in
653 	 * which case we would have bailed earlier.
654 	 */
655 	domain = find_first_zero_bit(zpci_domain, ZPCI_NR_DEVICES);
656 	set_bit(domain, zpci_domain);
657 	spin_unlock(&zpci_domain_lock);
658 	return domain;
659 }
660 
661 int zpci_alloc_domain(int domain)
662 {
663 	if (zpci_unique_uid) {
664 		if (domain)
665 			return __zpci_register_domain(domain);
666 		pr_warn("UID checking was active but no UID is provided: switching to automatic domain allocation\n");
667 		update_uid_checking(false);
668 	}
669 	return __zpci_alloc_domain();
670 }
671 
672 void zpci_free_domain(int domain)
673 {
674 	spin_lock(&zpci_domain_lock);
675 	clear_bit(domain, zpci_domain);
676 	spin_unlock(&zpci_domain_lock);
677 }
678 
679 
680 int zpci_enable_device(struct zpci_dev *zdev)
681 {
682 	u32 fh = zdev->fh;
683 	int rc = 0;
684 
685 	if (clp_enable_fh(zdev, &fh, ZPCI_NR_DMA_SPACES))
686 		rc = -EIO;
687 	else
688 		zpci_update_fh(zdev, fh);
689 	return rc;
690 }
691 EXPORT_SYMBOL_GPL(zpci_enable_device);
692 
693 int zpci_disable_device(struct zpci_dev *zdev)
694 {
695 	u32 fh = zdev->fh;
696 	int cc, rc = 0;
697 
698 	cc = clp_disable_fh(zdev, &fh);
699 	if (!cc) {
700 		zpci_update_fh(zdev, fh);
701 	} else if (cc == CLP_RC_SETPCIFN_ALRDY) {
702 		pr_info("Disabling PCI function %08x had no effect as it was already disabled\n",
703 			zdev->fid);
704 		/* Function is already disabled - update handle */
705 		rc = clp_refresh_fh(zdev->fid, &fh);
706 		if (!rc) {
707 			zpci_update_fh(zdev, fh);
708 			rc = -EINVAL;
709 		}
710 	} else {
711 		rc = -EIO;
712 	}
713 	return rc;
714 }
715 EXPORT_SYMBOL_GPL(zpci_disable_device);
716 
717 /**
718  * zpci_hot_reset_device - perform a reset of the given zPCI function
719  * @zdev: the slot which should be reset
720  *
721  * Performs a low level reset of the zPCI function. The reset is low level in
722  * the sense that the zPCI function can be reset without detaching it from the
723  * common PCI subsystem. The reset may be performed while under control of
724  * either DMA or IOMMU APIs in which case the existing DMA/IOMMU translation
725  * table is reinstated at the end of the reset.
726  *
727  * After the reset the functions internal state is reset to an initial state
728  * equivalent to its state during boot when first probing a driver.
729  * Consequently after reset the PCI function requires re-initialization via the
730  * common PCI code including re-enabling IRQs via pci_alloc_irq_vectors()
731  * and enabling the function via e.g. pci_enable_device_flags(). The caller
732  * must guard against concurrent reset attempts.
733  *
734  * In most cases this function should not be called directly but through
735  * pci_reset_function() or pci_reset_bus() which handle the save/restore and
736  * locking - asserted by lockdep.
737  *
738  * Return: 0 on success and an error value otherwise
739  */
740 int zpci_hot_reset_device(struct zpci_dev *zdev)
741 {
742 	u8 status;
743 	int rc;
744 
745 	lockdep_assert_held(&zdev->state_lock);
746 	zpci_dbg(3, "rst fid:%x, fh:%x\n", zdev->fid, zdev->fh);
747 	if (zdev_enabled(zdev)) {
748 		/* Disables device access, DMAs and IRQs (reset state) */
749 		rc = zpci_disable_device(zdev);
750 		/*
751 		 * Due to a z/VM vs LPAR inconsistency in the error state the
752 		 * FH may indicate an enabled device but disable says the
753 		 * device is already disabled don't treat it as an error here.
754 		 */
755 		if (rc == -EINVAL)
756 			rc = 0;
757 		if (rc)
758 			return rc;
759 	}
760 
761 	rc = zpci_enable_device(zdev);
762 	if (rc)
763 		return rc;
764 
765 	if (zdev->dma_table)
766 		rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
767 					virt_to_phys(zdev->dma_table), &status);
768 	if (rc) {
769 		zpci_disable_device(zdev);
770 		return rc;
771 	}
772 
773 	return 0;
774 }
775 
776 /**
777  * zpci_create_device() - Create a new zpci_dev and add it to the zbus
778  * @fid: Function ID of the device to be created
779  * @fh: Current Function Handle of the device to be created
780  * @state: Initial state after creation either Standby or Configured
781  *
782  * Allocates a new struct zpci_dev and queries the platform for its details.
783  * If successful the device can subsequently be added to the zPCI subsystem
784  * using zpci_add_device().
785  *
786  * Returns: the zdev on success or an error pointer otherwise
787  */
788 struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
789 {
790 	struct zpci_dev *zdev;
791 	int rc;
792 
793 	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
794 	if (!zdev)
795 		return ERR_PTR(-ENOMEM);
796 
797 	/* FID and Function Handle are the static/dynamic identifiers */
798 	zdev->fid = fid;
799 	zdev->fh = fh;
800 
801 	/* Query function properties and update zdev */
802 	rc = clp_query_pci_fn(zdev);
803 	if (rc)
804 		goto error;
805 	zdev->state =  state;
806 
807 	mutex_init(&zdev->state_lock);
808 	mutex_init(&zdev->fmb_lock);
809 	mutex_init(&zdev->kzdev_lock);
810 
811 	return zdev;
812 
813 error:
814 	zpci_dbg(0, "crt fid:%x, rc:%d\n", fid, rc);
815 	kfree(zdev);
816 	return ERR_PTR(rc);
817 }
818 
819 /**
820  * zpci_add_device() - Add a previously created zPCI device to the zPCI subsystem
821  * @zdev: The zPCI device to be added
822  *
823  * A struct zpci_dev is added to the zPCI subsystem and to a virtual PCI bus creating
824  * a new one as necessary. A hotplug slot is created and events start to be handled.
825  * If successful from this point on zpci_zdev_get() and zpci_zdev_put() must be used.
826  * If adding the struct zpci_dev fails the device was not added and should be freed.
827  *
828  * Return: 0 on success, or an error code otherwise
829  */
830 int zpci_add_device(struct zpci_dev *zdev)
831 {
832 	int rc;
833 
834 	zpci_dbg(1, "add fid:%x, fh:%x, c:%d\n", zdev->fid, zdev->fh, zdev->state);
835 	rc = zpci_init_iommu(zdev);
836 	if (rc)
837 		goto error;
838 
839 	rc = zpci_bus_device_register(zdev, &pci_root_ops);
840 	if (rc)
841 		goto error_destroy_iommu;
842 
843 	kref_init(&zdev->kref);
844 	spin_lock(&zpci_list_lock);
845 	list_add_tail(&zdev->entry, &zpci_list);
846 	spin_unlock(&zpci_list_lock);
847 	return 0;
848 
849 error_destroy_iommu:
850 	zpci_destroy_iommu(zdev);
851 error:
852 	zpci_dbg(0, "add fid:%x, rc:%d\n", zdev->fid, rc);
853 	return rc;
854 }
855 
856 bool zpci_is_device_configured(struct zpci_dev *zdev)
857 {
858 	enum zpci_state state = zdev->state;
859 
860 	return state != ZPCI_FN_STATE_RESERVED &&
861 		state != ZPCI_FN_STATE_STANDBY;
862 }
863 
864 /**
865  * zpci_scan_configured_device() - Scan a freshly configured zpci_dev
866  * @zdev: The zpci_dev to be configured
867  * @fh: The general function handle supplied by the platform
868  *
869  * Given a device in the configuration state Configured, enables, scans and
870  * adds it to the common code PCI subsystem if possible. If any failure occurs,
871  * the zpci_dev is left disabled.
872  *
873  * Return: 0 on success, or an error code otherwise
874  */
875 int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh)
876 {
877 	zpci_update_fh(zdev, fh);
878 	return zpci_bus_scan_device(zdev);
879 }
880 
881 /**
882  * zpci_deconfigure_device() - Deconfigure a zpci_dev
883  * @zdev: The zpci_dev to configure
884  *
885  * Deconfigure a zPCI function that is currently configured and possibly known
886  * to the common code PCI subsystem.
887  * If any failure occurs the device is left as is.
888  *
889  * Return: 0 on success, or an error code otherwise
890  */
891 int zpci_deconfigure_device(struct zpci_dev *zdev)
892 {
893 	int rc;
894 
895 	lockdep_assert_held(&zdev->state_lock);
896 	if (zdev->state != ZPCI_FN_STATE_CONFIGURED)
897 		return 0;
898 
899 	if (zdev->zbus->bus)
900 		zpci_bus_remove_device(zdev, false);
901 
902 	if (zdev_enabled(zdev)) {
903 		rc = zpci_disable_device(zdev);
904 		if (rc)
905 			return rc;
906 	}
907 
908 	rc = sclp_pci_deconfigure(zdev->fid);
909 	zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, rc);
910 	if (rc)
911 		return rc;
912 	zdev->state = ZPCI_FN_STATE_STANDBY;
913 
914 	return 0;
915 }
916 
917 /**
918  * zpci_device_reserved() - Mark device as reserved
919  * @zdev: the zpci_dev that was reserved
920  *
921  * Handle the case that a given zPCI function was reserved by another system.
922  * After a call to this function the zpci_dev can not be found via
923  * get_zdev_by_fid() anymore but may still be accessible via existing
924  * references though it will not be functional anymore.
925  */
926 void zpci_device_reserved(struct zpci_dev *zdev)
927 {
928 	/*
929 	 * Remove device from zpci_list as it is going away. This also
930 	 * makes sure we ignore subsequent zPCI events for this device.
931 	 */
932 	spin_lock(&zpci_list_lock);
933 	list_del(&zdev->entry);
934 	spin_unlock(&zpci_list_lock);
935 	zdev->state = ZPCI_FN_STATE_RESERVED;
936 	zpci_dbg(3, "rsv fid:%x\n", zdev->fid);
937 	zpci_zdev_put(zdev);
938 }
939 
940 void zpci_release_device(struct kref *kref)
941 {
942 	struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
943 
944 	WARN_ON(zdev->state != ZPCI_FN_STATE_RESERVED);
945 
946 	if (zdev->zbus->bus)
947 		zpci_bus_remove_device(zdev, false);
948 
949 	if (zdev_enabled(zdev))
950 		zpci_disable_device(zdev);
951 
952 	if (zdev->has_hp_slot)
953 		zpci_exit_slot(zdev);
954 
955 	if (zdev->has_resources)
956 		zpci_cleanup_bus_resources(zdev);
957 
958 	zpci_bus_device_unregister(zdev);
959 	zpci_destroy_iommu(zdev);
960 	zpci_dbg(3, "rem fid:%x\n", zdev->fid);
961 	kfree_rcu(zdev, rcu);
962 }
963 
964 int zpci_report_error(struct pci_dev *pdev,
965 		      struct zpci_report_error_header *report)
966 {
967 	struct zpci_dev *zdev = to_zpci(pdev);
968 
969 	return sclp_pci_report(report, zdev->fh, zdev->fid);
970 }
971 EXPORT_SYMBOL(zpci_report_error);
972 
973 /**
974  * zpci_clear_error_state() - Clears the zPCI error state of the device
975  * @zdev: The zdev for which the zPCI error state should be reset
976  *
977  * Clear the zPCI error state of the device. If clearing the zPCI error state
978  * fails the device is left in the error state. In this case it may make sense
979  * to call zpci_io_perm_failure() on the associated pdev if it exists.
980  *
981  * Returns: 0 on success, -EIO otherwise
982  */
983 int zpci_clear_error_state(struct zpci_dev *zdev)
984 {
985 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_ERROR);
986 	struct zpci_fib fib = {0};
987 	u8 status;
988 	int cc;
989 
990 	cc = zpci_mod_fc(req, &fib, &status);
991 	if (cc) {
992 		zpci_dbg(3, "ces fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
993 		return -EIO;
994 	}
995 
996 	return 0;
997 }
998 
999 /**
1000  * zpci_reset_load_store_blocked() - Re-enables L/S from error state
1001  * @zdev: The zdev for which to unblock load/store access
1002  *
1003  * Re-enables load/store access for a PCI function in the error state while
1004  * keeping DMA blocked. In this state drivers can poke MMIO space to determine
1005  * if error recovery is possible while catching any rogue DMA access from the
1006  * device.
1007  *
1008  * Returns: 0 on success, -EIO otherwise
1009  */
1010 int zpci_reset_load_store_blocked(struct zpci_dev *zdev)
1011 {
1012 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_BLOCK);
1013 	struct zpci_fib fib = {0};
1014 	u8 status;
1015 	int cc;
1016 
1017 	cc = zpci_mod_fc(req, &fib, &status);
1018 	if (cc) {
1019 		zpci_dbg(3, "rls fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
1020 		return -EIO;
1021 	}
1022 
1023 	return 0;
1024 }
1025 
1026 static int zpci_mem_init(void)
1027 {
1028 	BUILD_BUG_ON(!is_power_of_2(__alignof__(struct zpci_fmb)) ||
1029 		     __alignof__(struct zpci_fmb) < sizeof(struct zpci_fmb));
1030 
1031 	zdev_fmb_cache = kmem_cache_create("PCI_FMB_cache", sizeof(struct zpci_fmb),
1032 					   __alignof__(struct zpci_fmb), 0, NULL);
1033 	if (!zdev_fmb_cache)
1034 		goto error_fmb;
1035 
1036 	zpci_iomap_start = kcalloc(ZPCI_IOMAP_ENTRIES,
1037 				   sizeof(*zpci_iomap_start), GFP_KERNEL);
1038 	if (!zpci_iomap_start)
1039 		goto error_iomap;
1040 
1041 	zpci_iomap_bitmap = kcalloc(BITS_TO_LONGS(ZPCI_IOMAP_ENTRIES),
1042 				    sizeof(*zpci_iomap_bitmap), GFP_KERNEL);
1043 	if (!zpci_iomap_bitmap)
1044 		goto error_iomap_bitmap;
1045 
1046 	if (static_branch_likely(&have_mio))
1047 		clp_setup_writeback_mio();
1048 
1049 	return 0;
1050 error_iomap_bitmap:
1051 	kfree(zpci_iomap_start);
1052 error_iomap:
1053 	kmem_cache_destroy(zdev_fmb_cache);
1054 error_fmb:
1055 	return -ENOMEM;
1056 }
1057 
1058 static void zpci_mem_exit(void)
1059 {
1060 	kfree(zpci_iomap_bitmap);
1061 	kfree(zpci_iomap_start);
1062 	kmem_cache_destroy(zdev_fmb_cache);
1063 }
1064 
1065 static unsigned int s390_pci_probe __initdata = 1;
1066 unsigned int s390_pci_force_floating __initdata;
1067 static unsigned int s390_pci_initialized;
1068 
1069 char * __init pcibios_setup(char *str)
1070 {
1071 	if (!strcmp(str, "off")) {
1072 		s390_pci_probe = 0;
1073 		return NULL;
1074 	}
1075 	if (!strcmp(str, "nomio")) {
1076 		get_lowcore()->machine_flags &= ~MACHINE_FLAG_PCI_MIO;
1077 		return NULL;
1078 	}
1079 	if (!strcmp(str, "force_floating")) {
1080 		s390_pci_force_floating = 1;
1081 		return NULL;
1082 	}
1083 	if (!strcmp(str, "norid")) {
1084 		s390_pci_no_rid = 1;
1085 		return NULL;
1086 	}
1087 	return str;
1088 }
1089 
1090 bool zpci_is_enabled(void)
1091 {
1092 	return s390_pci_initialized;
1093 }
1094 
1095 static int zpci_cmp_rid(void *priv, const struct list_head *a,
1096 			const struct list_head *b)
1097 {
1098 	struct zpci_dev *za = container_of(a, struct zpci_dev, entry);
1099 	struct zpci_dev *zb = container_of(b, struct zpci_dev, entry);
1100 
1101 	/*
1102 	 * PCI functions without RID available maintain original order
1103 	 * between themselves but sort before those with RID.
1104 	 */
1105 	if (za->rid == zb->rid)
1106 		return za->rid_available > zb->rid_available;
1107 	/*
1108 	 * PCI functions with RID sort by RID ascending.
1109 	 */
1110 	return za->rid > zb->rid;
1111 }
1112 
1113 static void zpci_add_devices(struct list_head *scan_list)
1114 {
1115 	struct zpci_dev *zdev, *tmp;
1116 
1117 	list_sort(NULL, scan_list, &zpci_cmp_rid);
1118 	list_for_each_entry_safe(zdev, tmp, scan_list, entry) {
1119 		list_del_init(&zdev->entry);
1120 		if (zpci_add_device(zdev))
1121 			kfree(zdev);
1122 	}
1123 }
1124 
1125 int zpci_scan_devices(void)
1126 {
1127 	LIST_HEAD(scan_list);
1128 	int rc;
1129 
1130 	rc = clp_scan_pci_devices(&scan_list);
1131 	if (rc)
1132 		return rc;
1133 
1134 	zpci_add_devices(&scan_list);
1135 	zpci_bus_scan_busses();
1136 	return 0;
1137 }
1138 
1139 static int __init pci_base_init(void)
1140 {
1141 	int rc;
1142 
1143 	if (!s390_pci_probe)
1144 		return 0;
1145 
1146 	if (!test_facility(69) || !test_facility(71)) {
1147 		pr_info("PCI is not supported because CPU facilities 69 or 71 are not available\n");
1148 		return 0;
1149 	}
1150 
1151 	if (MACHINE_HAS_PCI_MIO) {
1152 		static_branch_enable(&have_mio);
1153 		system_ctl_set_bit(2, CR2_MIO_ADDRESSING_BIT);
1154 	}
1155 
1156 	rc = zpci_debug_init();
1157 	if (rc)
1158 		goto out;
1159 
1160 	rc = zpci_mem_init();
1161 	if (rc)
1162 		goto out_mem;
1163 
1164 	rc = zpci_irq_init();
1165 	if (rc)
1166 		goto out_irq;
1167 
1168 	rc = zpci_scan_devices();
1169 	if (rc)
1170 		goto out_find;
1171 
1172 	s390_pci_initialized = 1;
1173 	return 0;
1174 
1175 out_find:
1176 	zpci_irq_exit();
1177 out_irq:
1178 	zpci_mem_exit();
1179 out_mem:
1180 	zpci_debug_exit();
1181 out:
1182 	return rc;
1183 }
1184 subsys_initcall_sync(pci_base_init);
1185