xref: /linux/arch/s390/pci/pci.c (revision 7f4f3b14e8079ecde096bd734af10e30d40c27b7)
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  * Creates a new zpci device and adds it to its, possibly newly created, zbus
783  * as well as zpci_list.
784  *
785  * Returns: the zdev on success or an error pointer otherwise
786  */
787 struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
788 {
789 	struct zpci_dev *zdev;
790 	int rc;
791 
792 	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
793 	if (!zdev)
794 		return ERR_PTR(-ENOMEM);
795 
796 	/* FID and Function Handle are the static/dynamic identifiers */
797 	zdev->fid = fid;
798 	zdev->fh = fh;
799 
800 	/* Query function properties and update zdev */
801 	rc = clp_query_pci_fn(zdev);
802 	if (rc)
803 		goto error;
804 	zdev->state =  state;
805 
806 	kref_init(&zdev->kref);
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 int zpci_add_device(struct zpci_dev *zdev)
820 {
821 	int rc;
822 
823 	zpci_dbg(1, "add fid:%x, fh:%x, c:%d\n", zdev->fid, zdev->fh, zdev->state);
824 	rc = zpci_init_iommu(zdev);
825 	if (rc)
826 		goto error;
827 
828 	rc = zpci_bus_device_register(zdev, &pci_root_ops);
829 	if (rc)
830 		goto error_destroy_iommu;
831 
832 	spin_lock(&zpci_list_lock);
833 	list_add_tail(&zdev->entry, &zpci_list);
834 	spin_unlock(&zpci_list_lock);
835 	return 0;
836 
837 error_destroy_iommu:
838 	zpci_destroy_iommu(zdev);
839 error:
840 	zpci_dbg(0, "add fid:%x, rc:%d\n", zdev->fid, rc);
841 	return rc;
842 }
843 
844 bool zpci_is_device_configured(struct zpci_dev *zdev)
845 {
846 	enum zpci_state state = zdev->state;
847 
848 	return state != ZPCI_FN_STATE_RESERVED &&
849 		state != ZPCI_FN_STATE_STANDBY;
850 }
851 
852 /**
853  * zpci_scan_configured_device() - Scan a freshly configured zpci_dev
854  * @zdev: The zpci_dev to be configured
855  * @fh: The general function handle supplied by the platform
856  *
857  * Given a device in the configuration state Configured, enables, scans and
858  * adds it to the common code PCI subsystem if possible. If any failure occurs,
859  * the zpci_dev is left disabled.
860  *
861  * Return: 0 on success, or an error code otherwise
862  */
863 int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh)
864 {
865 	zpci_update_fh(zdev, fh);
866 	return zpci_bus_scan_device(zdev);
867 }
868 
869 /**
870  * zpci_deconfigure_device() - Deconfigure a zpci_dev
871  * @zdev: The zpci_dev to configure
872  *
873  * Deconfigure a zPCI function that is currently configured and possibly known
874  * to the common code PCI subsystem.
875  * If any failure occurs the device is left as is.
876  *
877  * Return: 0 on success, or an error code otherwise
878  */
879 int zpci_deconfigure_device(struct zpci_dev *zdev)
880 {
881 	int rc;
882 
883 	lockdep_assert_held(&zdev->state_lock);
884 	if (zdev->state != ZPCI_FN_STATE_CONFIGURED)
885 		return 0;
886 
887 	if (zdev->zbus->bus)
888 		zpci_bus_remove_device(zdev, false);
889 
890 	if (zdev_enabled(zdev)) {
891 		rc = zpci_disable_device(zdev);
892 		if (rc)
893 			return rc;
894 	}
895 
896 	rc = sclp_pci_deconfigure(zdev->fid);
897 	zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, rc);
898 	if (rc)
899 		return rc;
900 	zdev->state = ZPCI_FN_STATE_STANDBY;
901 
902 	return 0;
903 }
904 
905 /**
906  * zpci_device_reserved() - Mark device as reserved
907  * @zdev: the zpci_dev that was reserved
908  *
909  * Handle the case that a given zPCI function was reserved by another system.
910  * After a call to this function the zpci_dev can not be found via
911  * get_zdev_by_fid() anymore but may still be accessible via existing
912  * references though it will not be functional anymore.
913  */
914 void zpci_device_reserved(struct zpci_dev *zdev)
915 {
916 	/*
917 	 * Remove device from zpci_list as it is going away. This also
918 	 * makes sure we ignore subsequent zPCI events for this device.
919 	 */
920 	spin_lock(&zpci_list_lock);
921 	list_del(&zdev->entry);
922 	spin_unlock(&zpci_list_lock);
923 	zdev->state = ZPCI_FN_STATE_RESERVED;
924 	zpci_dbg(3, "rsv fid:%x\n", zdev->fid);
925 	zpci_zdev_put(zdev);
926 }
927 
928 void zpci_release_device(struct kref *kref)
929 {
930 	struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
931 	int ret;
932 
933 	if (zdev->has_hp_slot)
934 		zpci_exit_slot(zdev);
935 
936 	if (zdev->zbus->bus)
937 		zpci_bus_remove_device(zdev, false);
938 
939 	if (zdev_enabled(zdev))
940 		zpci_disable_device(zdev);
941 
942 	switch (zdev->state) {
943 	case ZPCI_FN_STATE_CONFIGURED:
944 		ret = sclp_pci_deconfigure(zdev->fid);
945 		zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, ret);
946 		fallthrough;
947 	case ZPCI_FN_STATE_STANDBY:
948 		if (zdev->has_hp_slot)
949 			zpci_exit_slot(zdev);
950 		spin_lock(&zpci_list_lock);
951 		list_del(&zdev->entry);
952 		spin_unlock(&zpci_list_lock);
953 		zpci_dbg(3, "rsv fid:%x\n", zdev->fid);
954 		fallthrough;
955 	case ZPCI_FN_STATE_RESERVED:
956 		if (zdev->has_resources)
957 			zpci_cleanup_bus_resources(zdev);
958 		zpci_bus_device_unregister(zdev);
959 		zpci_destroy_iommu(zdev);
960 		fallthrough;
961 	default:
962 		break;
963 	}
964 	zpci_dbg(3, "rem fid:%x\n", zdev->fid);
965 	kfree_rcu(zdev, rcu);
966 }
967 
968 int zpci_report_error(struct pci_dev *pdev,
969 		      struct zpci_report_error_header *report)
970 {
971 	struct zpci_dev *zdev = to_zpci(pdev);
972 
973 	return sclp_pci_report(report, zdev->fh, zdev->fid);
974 }
975 EXPORT_SYMBOL(zpci_report_error);
976 
977 /**
978  * zpci_clear_error_state() - Clears the zPCI error state of the device
979  * @zdev: The zdev for which the zPCI error state should be reset
980  *
981  * Clear the zPCI error state of the device. If clearing the zPCI error state
982  * fails the device is left in the error state. In this case it may make sense
983  * to call zpci_io_perm_failure() on the associated pdev if it exists.
984  *
985  * Returns: 0 on success, -EIO otherwise
986  */
987 int zpci_clear_error_state(struct zpci_dev *zdev)
988 {
989 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_ERROR);
990 	struct zpci_fib fib = {0};
991 	u8 status;
992 	int cc;
993 
994 	cc = zpci_mod_fc(req, &fib, &status);
995 	if (cc) {
996 		zpci_dbg(3, "ces fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
997 		return -EIO;
998 	}
999 
1000 	return 0;
1001 }
1002 
1003 /**
1004  * zpci_reset_load_store_blocked() - Re-enables L/S from error state
1005  * @zdev: The zdev for which to unblock load/store access
1006  *
1007  * Re-enables load/store access for a PCI function in the error state while
1008  * keeping DMA blocked. In this state drivers can poke MMIO space to determine
1009  * if error recovery is possible while catching any rogue DMA access from the
1010  * device.
1011  *
1012  * Returns: 0 on success, -EIO otherwise
1013  */
1014 int zpci_reset_load_store_blocked(struct zpci_dev *zdev)
1015 {
1016 	u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_RESET_BLOCK);
1017 	struct zpci_fib fib = {0};
1018 	u8 status;
1019 	int cc;
1020 
1021 	cc = zpci_mod_fc(req, &fib, &status);
1022 	if (cc) {
1023 		zpci_dbg(3, "rls fid:%x, cc:%d, status:%x\n", zdev->fid, cc, status);
1024 		return -EIO;
1025 	}
1026 
1027 	return 0;
1028 }
1029 
1030 static int zpci_mem_init(void)
1031 {
1032 	BUILD_BUG_ON(!is_power_of_2(__alignof__(struct zpci_fmb)) ||
1033 		     __alignof__(struct zpci_fmb) < sizeof(struct zpci_fmb));
1034 
1035 	zdev_fmb_cache = kmem_cache_create("PCI_FMB_cache", sizeof(struct zpci_fmb),
1036 					   __alignof__(struct zpci_fmb), 0, NULL);
1037 	if (!zdev_fmb_cache)
1038 		goto error_fmb;
1039 
1040 	zpci_iomap_start = kcalloc(ZPCI_IOMAP_ENTRIES,
1041 				   sizeof(*zpci_iomap_start), GFP_KERNEL);
1042 	if (!zpci_iomap_start)
1043 		goto error_iomap;
1044 
1045 	zpci_iomap_bitmap = kcalloc(BITS_TO_LONGS(ZPCI_IOMAP_ENTRIES),
1046 				    sizeof(*zpci_iomap_bitmap), GFP_KERNEL);
1047 	if (!zpci_iomap_bitmap)
1048 		goto error_iomap_bitmap;
1049 
1050 	if (static_branch_likely(&have_mio))
1051 		clp_setup_writeback_mio();
1052 
1053 	return 0;
1054 error_iomap_bitmap:
1055 	kfree(zpci_iomap_start);
1056 error_iomap:
1057 	kmem_cache_destroy(zdev_fmb_cache);
1058 error_fmb:
1059 	return -ENOMEM;
1060 }
1061 
1062 static void zpci_mem_exit(void)
1063 {
1064 	kfree(zpci_iomap_bitmap);
1065 	kfree(zpci_iomap_start);
1066 	kmem_cache_destroy(zdev_fmb_cache);
1067 }
1068 
1069 static unsigned int s390_pci_probe __initdata = 1;
1070 unsigned int s390_pci_force_floating __initdata;
1071 static unsigned int s390_pci_initialized;
1072 
1073 char * __init pcibios_setup(char *str)
1074 {
1075 	if (!strcmp(str, "off")) {
1076 		s390_pci_probe = 0;
1077 		return NULL;
1078 	}
1079 	if (!strcmp(str, "nomio")) {
1080 		get_lowcore()->machine_flags &= ~MACHINE_FLAG_PCI_MIO;
1081 		return NULL;
1082 	}
1083 	if (!strcmp(str, "force_floating")) {
1084 		s390_pci_force_floating = 1;
1085 		return NULL;
1086 	}
1087 	if (!strcmp(str, "norid")) {
1088 		s390_pci_no_rid = 1;
1089 		return NULL;
1090 	}
1091 	return str;
1092 }
1093 
1094 bool zpci_is_enabled(void)
1095 {
1096 	return s390_pci_initialized;
1097 }
1098 
1099 static int zpci_cmp_rid(void *priv, const struct list_head *a,
1100 			const struct list_head *b)
1101 {
1102 	struct zpci_dev *za = container_of(a, struct zpci_dev, entry);
1103 	struct zpci_dev *zb = container_of(b, struct zpci_dev, entry);
1104 
1105 	/*
1106 	 * PCI functions without RID available maintain original order
1107 	 * between themselves but sort before those with RID.
1108 	 */
1109 	if (za->rid == zb->rid)
1110 		return za->rid_available > zb->rid_available;
1111 	/*
1112 	 * PCI functions with RID sort by RID ascending.
1113 	 */
1114 	return za->rid > zb->rid;
1115 }
1116 
1117 static void zpci_add_devices(struct list_head *scan_list)
1118 {
1119 	struct zpci_dev *zdev, *tmp;
1120 
1121 	list_sort(NULL, scan_list, &zpci_cmp_rid);
1122 	list_for_each_entry_safe(zdev, tmp, scan_list, entry) {
1123 		list_del_init(&zdev->entry);
1124 		zpci_add_device(zdev);
1125 	}
1126 }
1127 
1128 int zpci_scan_devices(void)
1129 {
1130 	LIST_HEAD(scan_list);
1131 	int rc;
1132 
1133 	rc = clp_scan_pci_devices(&scan_list);
1134 	if (rc)
1135 		return rc;
1136 
1137 	zpci_add_devices(&scan_list);
1138 	zpci_bus_scan_busses();
1139 	return 0;
1140 }
1141 
1142 static int __init pci_base_init(void)
1143 {
1144 	int rc;
1145 
1146 	if (!s390_pci_probe)
1147 		return 0;
1148 
1149 	if (!test_facility(69) || !test_facility(71)) {
1150 		pr_info("PCI is not supported because CPU facilities 69 or 71 are not available\n");
1151 		return 0;
1152 	}
1153 
1154 	if (MACHINE_HAS_PCI_MIO) {
1155 		static_branch_enable(&have_mio);
1156 		system_ctl_set_bit(2, CR2_MIO_ADDRESSING_BIT);
1157 	}
1158 
1159 	rc = zpci_debug_init();
1160 	if (rc)
1161 		goto out;
1162 
1163 	rc = zpci_mem_init();
1164 	if (rc)
1165 		goto out_mem;
1166 
1167 	rc = zpci_irq_init();
1168 	if (rc)
1169 		goto out_irq;
1170 
1171 	rc = zpci_scan_devices();
1172 	if (rc)
1173 		goto out_find;
1174 
1175 	s390_pci_initialized = 1;
1176 	return 0;
1177 
1178 out_find:
1179 	zpci_irq_exit();
1180 out_irq:
1181 	zpci_mem_exit();
1182 out_mem:
1183 	zpci_debug_exit();
1184 out:
1185 	return rc;
1186 }
1187 subsys_initcall_sync(pci_base_init);
1188