xref: /linux/arch/s390/pci/pci.c (revision f90f2145b2804c0166126a6c8fbf51d695917df3)
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/machine.h>
35 #include <asm/isc.h>
36 #include <asm/airq.h>
37 #include <asm/facility.h>
38 #include <asm/pci_insn.h>
39 #include <asm/pci_clp.h>
40 #include <asm/pci_dma.h>
41 
42 #include "pci_bus.h"
43 #include "pci_iov.h"
44 
45 /* list of all detected zpci devices */
46 static LIST_HEAD(zpci_list);
47 static DEFINE_SPINLOCK(zpci_list_lock);
48 
49 static DECLARE_BITMAP(zpci_domain, ZPCI_DOMAIN_BITMAP_SIZE);
50 static DEFINE_SPINLOCK(zpci_domain_lock);
51 
52 #define ZPCI_IOMAP_ENTRIES						\
53 	min(((unsigned long) ZPCI_NR_DEVICES * PCI_STD_NUM_BARS / 2),	\
54 	    ZPCI_IOMAP_MAX_ENTRIES)
55 
56 unsigned int s390_pci_no_rid;
57 
58 static DEFINE_SPINLOCK(zpci_iomap_lock);
59 static unsigned long *zpci_iomap_bitmap;
60 struct zpci_iomap_entry *zpci_iomap_start;
61 EXPORT_SYMBOL_GPL(zpci_iomap_start);
62 
63 DEFINE_STATIC_KEY_FALSE(have_mio);
64 
65 static struct kmem_cache *zdev_fmb_cache;
66 
67 /* AEN structures that must be preserved over KVM module re-insertion */
68 union zpci_sic_iib *zpci_aipb;
69 EXPORT_SYMBOL_GPL(zpci_aipb);
70 struct airq_iv *zpci_aif_sbv;
71 EXPORT_SYMBOL_GPL(zpci_aif_sbv);
72 
73 struct zpci_dev *get_zdev_by_fid(u32 fid)
74 {
75 	struct zpci_dev *tmp, *zdev = NULL;
76 
77 	spin_lock(&zpci_list_lock);
78 	list_for_each_entry(tmp, &zpci_list, entry) {
79 		if (tmp->fid == fid) {
80 			zdev = tmp;
81 			zpci_zdev_get(zdev);
82 			break;
83 		}
84 	}
85 	spin_unlock(&zpci_list_lock);
86 	return zdev;
87 }
88 
89 void zpci_remove_reserved_devices(void)
90 {
91 	struct zpci_dev *tmp, *zdev;
92 	enum zpci_state state;
93 	LIST_HEAD(remove);
94 
95 	spin_lock(&zpci_list_lock);
96 	list_for_each_entry_safe(zdev, tmp, &zpci_list, entry) {
97 		if (zdev->state == ZPCI_FN_STATE_STANDBY &&
98 		    !clp_get_state(zdev->fid, &state) &&
99 		    state == ZPCI_FN_STATE_RESERVED)
100 			list_move_tail(&zdev->entry, &remove);
101 	}
102 	spin_unlock(&zpci_list_lock);
103 
104 	list_for_each_entry_safe(zdev, tmp, &remove, entry)
105 		zpci_device_reserved(zdev);
106 }
107 
108 int pci_domain_nr(struct pci_bus *bus)
109 {
110 	return ((struct zpci_bus *) bus->sysdata)->domain_nr;
111 }
112 EXPORT_SYMBOL_GPL(pci_domain_nr);
113 
114 int pci_proc_domain(struct pci_bus *bus)
115 {
116 	return pci_domain_nr(bus);
117 }
118 EXPORT_SYMBOL_GPL(pci_proc_domain);
119 
120 /* Modify PCI: Register I/O address translation parameters */
121 int zpci_register_ioat(struct zpci_dev *zdev, u8 dmaas,
122 		       u64 base, u64 limit, u64 iota, u8 *status)
123 {
124 	u64 req = ZPCI_CREATE_REQ(zdev->fh, dmaas, ZPCI_MOD_FC_REG_IOAT);
125 	struct zpci_fib fib = {0};
126 	u8 cc;
127 
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;
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_reenable_device(struct zpci_dev *zdev)
694 {
695 	u8 status;
696 	int rc;
697 
698 	rc = zpci_enable_device(zdev);
699 	if (rc)
700 		return rc;
701 
702 	rc = zpci_iommu_register_ioat(zdev, &status);
703 	if (rc)
704 		zpci_disable_device(zdev);
705 
706 	return rc;
707 }
708 EXPORT_SYMBOL_GPL(zpci_reenable_device);
709 
710 int zpci_disable_device(struct zpci_dev *zdev)
711 {
712 	u32 fh = zdev->fh;
713 	int cc, rc = 0;
714 
715 	cc = clp_disable_fh(zdev, &fh);
716 	if (!cc) {
717 		zpci_update_fh(zdev, fh);
718 	} else if (cc == CLP_RC_SETPCIFN_ALRDY) {
719 		pr_info("Disabling PCI function %08x had no effect as it was already disabled\n",
720 			zdev->fid);
721 		/* Function is already disabled - update handle */
722 		rc = clp_refresh_fh(zdev->fid, &fh);
723 		if (!rc) {
724 			zpci_update_fh(zdev, fh);
725 			rc = -EINVAL;
726 		}
727 	} else {
728 		rc = -EIO;
729 	}
730 	return rc;
731 }
732 EXPORT_SYMBOL_GPL(zpci_disable_device);
733 
734 /**
735  * zpci_hot_reset_device - perform a reset of the given zPCI function
736  * @zdev: the slot which should be reset
737  *
738  * Performs a low level reset of the zPCI function. The reset is low level in
739  * the sense that the zPCI function can be reset without detaching it from the
740  * common PCI subsystem. The reset may be performed while under control of
741  * either DMA or IOMMU APIs in which case the existing DMA/IOMMU translation
742  * table is reinstated at the end of the reset.
743  *
744  * After the reset the functions internal state is reset to an initial state
745  * equivalent to its state during boot when first probing a driver.
746  * Consequently after reset the PCI function requires re-initialization via the
747  * common PCI code including re-enabling IRQs via pci_alloc_irq_vectors()
748  * and enabling the function via e.g. pci_enable_device_flags(). The caller
749  * must guard against concurrent reset attempts.
750  *
751  * In most cases this function should not be called directly but through
752  * pci_reset_function() or pci_reset_bus() which handle the save/restore and
753  * locking - asserted by lockdep.
754  *
755  * Return: 0 on success and an error value otherwise
756  */
757 int zpci_hot_reset_device(struct zpci_dev *zdev)
758 {
759 	int rc;
760 
761 	lockdep_assert_held(&zdev->state_lock);
762 	zpci_dbg(3, "rst fid:%x, fh:%x\n", zdev->fid, zdev->fh);
763 	if (zdev_enabled(zdev)) {
764 		/* Disables device access, DMAs and IRQs (reset state) */
765 		rc = zpci_disable_device(zdev);
766 		/*
767 		 * Due to a z/VM vs LPAR inconsistency in the error state the
768 		 * FH may indicate an enabled device but disable says the
769 		 * device is already disabled don't treat it as an error here.
770 		 */
771 		if (rc == -EINVAL)
772 			rc = 0;
773 		if (rc)
774 			return rc;
775 	}
776 
777 	rc = zpci_reenable_device(zdev);
778 
779 	return rc;
780 }
781 
782 /**
783  * zpci_create_device() - Create a new zpci_dev and add it to the zbus
784  * @fid: Function ID of the device to be created
785  * @fh: Current Function Handle of the device to be created
786  * @state: Initial state after creation either Standby or Configured
787  *
788  * Allocates a new struct zpci_dev and queries the platform for its details.
789  * If successful the device can subsequently be added to the zPCI subsystem
790  * using zpci_add_device().
791  *
792  * Returns: the zdev on success or an error pointer otherwise
793  */
794 struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
795 {
796 	struct zpci_dev *zdev;
797 	int rc;
798 
799 	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
800 	if (!zdev)
801 		return ERR_PTR(-ENOMEM);
802 
803 	/* FID and Function Handle are the static/dynamic identifiers */
804 	zdev->fid = fid;
805 	zdev->fh = fh;
806 
807 	/* Query function properties and update zdev */
808 	rc = clp_query_pci_fn(zdev);
809 	if (rc)
810 		goto error;
811 	zdev->state =  state;
812 
813 	mutex_init(&zdev->state_lock);
814 	mutex_init(&zdev->fmb_lock);
815 	mutex_init(&zdev->kzdev_lock);
816 
817 	return zdev;
818 
819 error:
820 	zpci_dbg(0, "crt fid:%x, rc:%d\n", fid, rc);
821 	kfree(zdev);
822 	return ERR_PTR(rc);
823 }
824 
825 /**
826  * zpci_add_device() - Add a previously created zPCI device to the zPCI subsystem
827  * @zdev: The zPCI device to be added
828  *
829  * A struct zpci_dev is added to the zPCI subsystem and to a virtual PCI bus creating
830  * a new one as necessary. A hotplug slot is created and events start to be handled.
831  * If successful from this point on zpci_zdev_get() and zpci_zdev_put() must be used.
832  * If adding the struct zpci_dev fails the device was not added and should be freed.
833  *
834  * Return: 0 on success, or an error code otherwise
835  */
836 int zpci_add_device(struct zpci_dev *zdev)
837 {
838 	int rc;
839 
840 	zpci_dbg(1, "add fid:%x, fh:%x, c:%d\n", zdev->fid, zdev->fh, zdev->state);
841 	rc = zpci_init_iommu(zdev);
842 	if (rc)
843 		goto error;
844 
845 	rc = zpci_bus_device_register(zdev, &pci_root_ops);
846 	if (rc)
847 		goto error_destroy_iommu;
848 
849 	kref_init(&zdev->kref);
850 	spin_lock(&zpci_list_lock);
851 	list_add_tail(&zdev->entry, &zpci_list);
852 	spin_unlock(&zpci_list_lock);
853 	return 0;
854 
855 error_destroy_iommu:
856 	zpci_destroy_iommu(zdev);
857 error:
858 	zpci_dbg(0, "add fid:%x, rc:%d\n", zdev->fid, rc);
859 	return rc;
860 }
861 
862 bool zpci_is_device_configured(struct zpci_dev *zdev)
863 {
864 	enum zpci_state state = zdev->state;
865 
866 	return state != ZPCI_FN_STATE_RESERVED &&
867 		state != ZPCI_FN_STATE_STANDBY;
868 }
869 
870 /**
871  * zpci_scan_configured_device() - Scan a freshly configured zpci_dev
872  * @zdev: The zpci_dev to be configured
873  * @fh: The general function handle supplied by the platform
874  *
875  * Given a device in the configuration state Configured, enables, scans and
876  * adds it to the common code PCI subsystem if possible. If any failure occurs,
877  * the zpci_dev is left disabled.
878  *
879  * Return: 0 on success, or an error code otherwise
880  */
881 int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh)
882 {
883 	zpci_update_fh(zdev, fh);
884 	return zpci_bus_scan_device(zdev);
885 }
886 
887 /**
888  * zpci_deconfigure_device() - Deconfigure a zpci_dev
889  * @zdev: The zpci_dev to configure
890  *
891  * Deconfigure a zPCI function that is currently configured and possibly known
892  * to the common code PCI subsystem.
893  * If any failure occurs the device is left as is.
894  *
895  * Return: 0 on success, or an error code otherwise
896  */
897 int zpci_deconfigure_device(struct zpci_dev *zdev)
898 {
899 	int rc;
900 
901 	lockdep_assert_held(&zdev->state_lock);
902 	if (zdev->state != ZPCI_FN_STATE_CONFIGURED)
903 		return 0;
904 
905 	if (zdev->zbus->bus)
906 		zpci_bus_remove_device(zdev, false);
907 
908 	if (zdev_enabled(zdev)) {
909 		rc = zpci_disable_device(zdev);
910 		if (rc)
911 			return rc;
912 	}
913 
914 	rc = sclp_pci_deconfigure(zdev->fid);
915 	zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, rc);
916 	if (rc)
917 		return rc;
918 	zdev->state = ZPCI_FN_STATE_STANDBY;
919 
920 	return 0;
921 }
922 
923 /**
924  * zpci_device_reserved() - Mark device as reserved
925  * @zdev: the zpci_dev that was reserved
926  *
927  * Handle the case that a given zPCI function was reserved by another system.
928  * After a call to this function the zpci_dev can not be found via
929  * get_zdev_by_fid() anymore but may still be accessible via existing
930  * references though it will not be functional anymore.
931  */
932 void zpci_device_reserved(struct zpci_dev *zdev)
933 {
934 	/*
935 	 * Remove device from zpci_list as it is going away. This also
936 	 * makes sure we ignore subsequent zPCI events for this device.
937 	 */
938 	spin_lock(&zpci_list_lock);
939 	list_del(&zdev->entry);
940 	spin_unlock(&zpci_list_lock);
941 	zdev->state = ZPCI_FN_STATE_RESERVED;
942 	zpci_dbg(3, "rsv fid:%x\n", zdev->fid);
943 	zpci_zdev_put(zdev);
944 }
945 
946 void zpci_release_device(struct kref *kref)
947 {
948 	struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
949 
950 	WARN_ON(zdev->state != ZPCI_FN_STATE_RESERVED);
951 
952 	if (zdev->zbus->bus)
953 		zpci_bus_remove_device(zdev, false);
954 
955 	if (zdev_enabled(zdev))
956 		zpci_disable_device(zdev);
957 
958 	if (zdev->has_hp_slot)
959 		zpci_exit_slot(zdev);
960 
961 	if (zdev->has_resources)
962 		zpci_cleanup_bus_resources(zdev);
963 
964 	zpci_bus_device_unregister(zdev);
965 	zpci_destroy_iommu(zdev);
966 	zpci_dbg(3, "rem fid:%x\n", zdev->fid);
967 	kfree_rcu(zdev, rcu);
968 }
969 
970 int zpci_report_error(struct pci_dev *pdev,
971 		      struct zpci_report_error_header *report)
972 {
973 	struct zpci_dev *zdev = to_zpci(pdev);
974 
975 	return sclp_pci_report(report, zdev->fh, zdev->fid);
976 }
977 EXPORT_SYMBOL(zpci_report_error);
978 
979 /**
980  * zpci_clear_error_state() - Clears the zPCI error state of the device
981  * @zdev: The zdev for which the zPCI error state should be reset
982  *
983  * Clear the zPCI error state of the device. If clearing the zPCI error state
984  * fails the device is left in the error state. In this case it may make sense
985  * to call zpci_io_perm_failure() on the associated pdev if it exists.
986  *
987  * Returns: 0 on success, -EIO otherwise
988  */
989 int zpci_clear_error_state(struct zpci_dev *zdev)
990 {
991 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_ERROR);
992 	struct zpci_fib fib = {0};
993 	u8 status;
994 	int cc;
995 
996 	cc = zpci_mod_fc(req, &fib, &status);
997 	if (cc) {
998 		zpci_dbg(3, "ces fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
999 		return -EIO;
1000 	}
1001 
1002 	return 0;
1003 }
1004 
1005 /**
1006  * zpci_reset_load_store_blocked() - Re-enables L/S from error state
1007  * @zdev: The zdev for which to unblock load/store access
1008  *
1009  * Re-enables load/store access for a PCI function in the error state while
1010  * keeping DMA blocked. In this state drivers can poke MMIO space to determine
1011  * if error recovery is possible while catching any rogue DMA access from the
1012  * device.
1013  *
1014  * Returns: 0 on success, -EIO otherwise
1015  */
1016 int zpci_reset_load_store_blocked(struct zpci_dev *zdev)
1017 {
1018 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_BLOCK);
1019 	struct zpci_fib fib = {0};
1020 	u8 status;
1021 	int cc;
1022 
1023 	cc = zpci_mod_fc(req, &fib, &status);
1024 	if (cc) {
1025 		zpci_dbg(3, "rls fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
1026 		return -EIO;
1027 	}
1028 
1029 	return 0;
1030 }
1031 
1032 static int zpci_mem_init(void)
1033 {
1034 	BUILD_BUG_ON(!is_power_of_2(__alignof__(struct zpci_fmb)) ||
1035 		     __alignof__(struct zpci_fmb) < sizeof(struct zpci_fmb));
1036 
1037 	zdev_fmb_cache = kmem_cache_create("PCI_FMB_cache", sizeof(struct zpci_fmb),
1038 					   __alignof__(struct zpci_fmb), 0, NULL);
1039 	if (!zdev_fmb_cache)
1040 		goto error_fmb;
1041 
1042 	zpci_iomap_start = kcalloc(ZPCI_IOMAP_ENTRIES,
1043 				   sizeof(*zpci_iomap_start), GFP_KERNEL);
1044 	if (!zpci_iomap_start)
1045 		goto error_iomap;
1046 
1047 	zpci_iomap_bitmap = kcalloc(BITS_TO_LONGS(ZPCI_IOMAP_ENTRIES),
1048 				    sizeof(*zpci_iomap_bitmap), GFP_KERNEL);
1049 	if (!zpci_iomap_bitmap)
1050 		goto error_iomap_bitmap;
1051 
1052 	if (static_branch_likely(&have_mio))
1053 		clp_setup_writeback_mio();
1054 
1055 	return 0;
1056 error_iomap_bitmap:
1057 	kfree(zpci_iomap_start);
1058 error_iomap:
1059 	kmem_cache_destroy(zdev_fmb_cache);
1060 error_fmb:
1061 	return -ENOMEM;
1062 }
1063 
1064 static void zpci_mem_exit(void)
1065 {
1066 	kfree(zpci_iomap_bitmap);
1067 	kfree(zpci_iomap_start);
1068 	kmem_cache_destroy(zdev_fmb_cache);
1069 }
1070 
1071 static unsigned int s390_pci_probe __initdata = 1;
1072 unsigned int s390_pci_force_floating __initdata;
1073 static unsigned int s390_pci_initialized;
1074 
1075 char * __init pcibios_setup(char *str)
1076 {
1077 	if (!strcmp(str, "off")) {
1078 		s390_pci_probe = 0;
1079 		return NULL;
1080 	}
1081 	if (!strcmp(str, "nomio")) {
1082 		clear_machine_feature(MFEATURE_PCI_MIO);
1083 		return NULL;
1084 	}
1085 	if (!strcmp(str, "force_floating")) {
1086 		s390_pci_force_floating = 1;
1087 		return NULL;
1088 	}
1089 	if (!strcmp(str, "norid")) {
1090 		s390_pci_no_rid = 1;
1091 		return NULL;
1092 	}
1093 	return str;
1094 }
1095 
1096 bool zpci_is_enabled(void)
1097 {
1098 	return s390_pci_initialized;
1099 }
1100 
1101 static int zpci_cmp_rid(void *priv, const struct list_head *a,
1102 			const struct list_head *b)
1103 {
1104 	struct zpci_dev *za = container_of(a, struct zpci_dev, entry);
1105 	struct zpci_dev *zb = container_of(b, struct zpci_dev, entry);
1106 
1107 	/*
1108 	 * PCI functions without RID available maintain original order
1109 	 * between themselves but sort before those with RID.
1110 	 */
1111 	if (za->rid == zb->rid)
1112 		return za->rid_available > zb->rid_available;
1113 	/*
1114 	 * PCI functions with RID sort by RID ascending.
1115 	 */
1116 	return za->rid > zb->rid;
1117 }
1118 
1119 static void zpci_add_devices(struct list_head *scan_list)
1120 {
1121 	struct zpci_dev *zdev, *tmp;
1122 
1123 	list_sort(NULL, scan_list, &zpci_cmp_rid);
1124 	list_for_each_entry_safe(zdev, tmp, scan_list, entry) {
1125 		list_del_init(&zdev->entry);
1126 		if (zpci_add_device(zdev))
1127 			kfree(zdev);
1128 	}
1129 }
1130 
1131 int zpci_scan_devices(void)
1132 {
1133 	LIST_HEAD(scan_list);
1134 	int rc;
1135 
1136 	rc = clp_scan_pci_devices(&scan_list);
1137 	if (rc)
1138 		return rc;
1139 
1140 	zpci_add_devices(&scan_list);
1141 	zpci_bus_scan_busses();
1142 	return 0;
1143 }
1144 
1145 static int __init pci_base_init(void)
1146 {
1147 	int rc;
1148 
1149 	if (!s390_pci_probe)
1150 		return 0;
1151 
1152 	if (!test_facility(69) || !test_facility(71)) {
1153 		pr_info("PCI is not supported because CPU facilities 69 or 71 are not available\n");
1154 		return 0;
1155 	}
1156 
1157 	if (test_machine_feature(MFEATURE_PCI_MIO)) {
1158 		static_branch_enable(&have_mio);
1159 		system_ctl_set_bit(2, CR2_MIO_ADDRESSING_BIT);
1160 	}
1161 
1162 	rc = zpci_debug_init();
1163 	if (rc)
1164 		goto out;
1165 
1166 	rc = zpci_mem_init();
1167 	if (rc)
1168 		goto out_mem;
1169 
1170 	rc = zpci_irq_init();
1171 	if (rc)
1172 		goto out_irq;
1173 
1174 	rc = zpci_scan_devices();
1175 	if (rc)
1176 		goto out_find;
1177 
1178 	s390_pci_initialized = 1;
1179 	return 0;
1180 
1181 out_find:
1182 	zpci_irq_exit();
1183 out_irq:
1184 	zpci_mem_exit();
1185 out_mem:
1186 	zpci_debug_exit();
1187 out:
1188 	return rc;
1189 }
1190 subsys_initcall_sync(pci_base_init);
1191