ALSA: firewire-motu: wait for notification when changing clock configuration for...
[linux-2.6-microblaze.git] / arch / powerpc / kernel / pci_dn.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * pci_dn.c
4  *
5  * Copyright (C) 2001 Todd Inglett, IBM Corporation
6  *
7  * PCI manipulation via device_nodes.
8  */
9 #include <linux/kernel.h>
10 #include <linux/pci.h>
11 #include <linux/string.h>
12 #include <linux/export.h>
13 #include <linux/init.h>
14 #include <linux/gfp.h>
15
16 #include <asm/io.h>
17 #include <asm/prom.h>
18 #include <asm/pci-bridge.h>
19 #include <asm/ppc-pci.h>
20 #include <asm/firmware.h>
21 #include <asm/eeh.h>
22
23 /*
24  * The function is used to find the firmware data of one
25  * specific PCI device, which is attached to the indicated
26  * PCI bus. For VFs, their firmware data is linked to that
27  * one of PF's bridge. For other devices, their firmware
28  * data is linked to that of their bridge.
29  */
30 static struct pci_dn *pci_bus_to_pdn(struct pci_bus *bus)
31 {
32         struct pci_bus *pbus;
33         struct device_node *dn;
34         struct pci_dn *pdn;
35
36         /*
37          * We probably have virtual bus which doesn't
38          * have associated bridge.
39          */
40         pbus = bus;
41         while (pbus) {
42                 if (pci_is_root_bus(pbus) || pbus->self)
43                         break;
44
45                 pbus = pbus->parent;
46         }
47
48         /*
49          * Except virtual bus, all PCI buses should
50          * have device nodes.
51          */
52         dn = pci_bus_to_OF_node(pbus);
53         pdn = dn ? PCI_DN(dn) : NULL;
54
55         return pdn;
56 }
57
58 struct pci_dn *pci_get_pdn_by_devfn(struct pci_bus *bus,
59                                     int devfn)
60 {
61         struct device_node *dn = NULL;
62         struct pci_dn *parent, *pdn;
63         struct pci_dev *pdev = NULL;
64
65         /* Fast path: fetch from PCI device */
66         list_for_each_entry(pdev, &bus->devices, bus_list) {
67                 if (pdev->devfn == devfn) {
68                         if (pdev->dev.archdata.pci_data)
69                                 return pdev->dev.archdata.pci_data;
70
71                         dn = pci_device_to_OF_node(pdev);
72                         break;
73                 }
74         }
75
76         /* Fast path: fetch from device node */
77         pdn = dn ? PCI_DN(dn) : NULL;
78         if (pdn)
79                 return pdn;
80
81         /* Slow path: fetch from firmware data hierarchy */
82         parent = pci_bus_to_pdn(bus);
83         if (!parent)
84                 return NULL;
85
86         list_for_each_entry(pdn, &parent->child_list, list) {
87                 if (pdn->busno == bus->number &&
88                     pdn->devfn == devfn)
89                         return pdn;
90         }
91
92         return NULL;
93 }
94
95 struct pci_dn *pci_get_pdn(struct pci_dev *pdev)
96 {
97         struct device_node *dn;
98         struct pci_dn *parent, *pdn;
99
100         /* Search device directly */
101         if (pdev->dev.archdata.pci_data)
102                 return pdev->dev.archdata.pci_data;
103
104         /* Check device node */
105         dn = pci_device_to_OF_node(pdev);
106         pdn = dn ? PCI_DN(dn) : NULL;
107         if (pdn)
108                 return pdn;
109
110         /*
111          * VFs don't have device nodes. We hook their
112          * firmware data to PF's bridge.
113          */
114         parent = pci_bus_to_pdn(pdev->bus);
115         if (!parent)
116                 return NULL;
117
118         list_for_each_entry(pdn, &parent->child_list, list) {
119                 if (pdn->busno == pdev->bus->number &&
120                     pdn->devfn == pdev->devfn)
121                         return pdn;
122         }
123
124         return NULL;
125 }
126
127 #ifdef CONFIG_PCI_IOV
128 static struct pci_dn *add_one_sriov_vf_pdn(struct pci_dn *parent,
129                                            int vf_index,
130                                            int busno, int devfn)
131 {
132         struct pci_dn *pdn;
133
134         /* Except PHB, we always have the parent */
135         if (!parent)
136                 return NULL;
137
138         pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
139         if (!pdn)
140                 return NULL;
141
142         pdn->phb = parent->phb;
143         pdn->parent = parent;
144         pdn->busno = busno;
145         pdn->devfn = devfn;
146         pdn->vf_index = vf_index;
147         pdn->pe_number = IODA_INVALID_PE;
148         INIT_LIST_HEAD(&pdn->child_list);
149         INIT_LIST_HEAD(&pdn->list);
150         list_add_tail(&pdn->list, &parent->child_list);
151
152         return pdn;
153 }
154
155 struct pci_dn *add_sriov_vf_pdns(struct pci_dev *pdev)
156 {
157         struct pci_dn *parent, *pdn;
158         int i;
159
160         /* Only support IOV for now */
161         if (WARN_ON(!pdev->is_physfn))
162                 return NULL;
163
164         /* Check if VFs have been populated */
165         pdn = pci_get_pdn(pdev);
166         if (!pdn || (pdn->flags & PCI_DN_FLAG_IOV_VF))
167                 return NULL;
168
169         pdn->flags |= PCI_DN_FLAG_IOV_VF;
170         parent = pci_bus_to_pdn(pdev->bus);
171         if (!parent)
172                 return NULL;
173
174         for (i = 0; i < pci_sriov_get_totalvfs(pdev); i++) {
175                 struct eeh_dev *edev __maybe_unused;
176
177                 pdn = add_one_sriov_vf_pdn(parent, i,
178                                            pci_iov_virtfn_bus(pdev, i),
179                                            pci_iov_virtfn_devfn(pdev, i));
180                 if (!pdn) {
181                         dev_warn(&pdev->dev, "%s: Cannot create firmware data for VF#%d\n",
182                                  __func__, i);
183                         return NULL;
184                 }
185
186 #ifdef CONFIG_EEH
187                 /* Create the EEH device for the VF */
188                 edev = eeh_dev_init(pdn);
189                 BUG_ON(!edev);
190                 edev->physfn = pdev;
191 #endif /* CONFIG_EEH */
192         }
193         return pci_get_pdn(pdev);
194 }
195
196 void remove_sriov_vf_pdns(struct pci_dev *pdev)
197 {
198         struct pci_dn *parent;
199         struct pci_dn *pdn, *tmp;
200         int i;
201
202         /* Only support IOV PF for now */
203         if (WARN_ON(!pdev->is_physfn))
204                 return;
205
206         /* Check if VFs have been populated */
207         pdn = pci_get_pdn(pdev);
208         if (!pdn || !(pdn->flags & PCI_DN_FLAG_IOV_VF))
209                 return;
210
211         pdn->flags &= ~PCI_DN_FLAG_IOV_VF;
212         parent = pci_bus_to_pdn(pdev->bus);
213         if (!parent)
214                 return;
215
216         /*
217          * We might introduce flag to pci_dn in future
218          * so that we can release VF's firmware data in
219          * a batch mode.
220          */
221         for (i = 0; i < pci_sriov_get_totalvfs(pdev); i++) {
222                 struct eeh_dev *edev __maybe_unused;
223
224                 list_for_each_entry_safe(pdn, tmp,
225                         &parent->child_list, list) {
226                         if (pdn->busno != pci_iov_virtfn_bus(pdev, i) ||
227                             pdn->devfn != pci_iov_virtfn_devfn(pdev, i))
228                                 continue;
229
230 #ifdef CONFIG_EEH
231                         /*
232                          * Release EEH state for this VF. The PCI core
233                          * has already torn down the pci_dev for this VF, but
234                          * we're responsible to removing the eeh_dev since it
235                          * has the same lifetime as the pci_dn that spawned it.
236                          */
237                         edev = pdn_to_eeh_dev(pdn);
238                         if (edev) {
239                                 /*
240                                  * We allocate pci_dn's for the totalvfs count,
241                                  * but only only the vfs that were activated
242                                  * have a configured PE.
243                                  */
244                                 if (edev->pe)
245                                         eeh_rmv_from_parent_pe(edev);
246
247                                 pdn->edev = NULL;
248                                 kfree(edev);
249                         }
250 #endif /* CONFIG_EEH */
251
252                         if (!list_empty(&pdn->list))
253                                 list_del(&pdn->list);
254
255                         kfree(pdn);
256                 }
257         }
258 }
259 #endif /* CONFIG_PCI_IOV */
260
261 struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
262                                         struct device_node *dn)
263 {
264         const __be32 *type = of_get_property(dn, "ibm,pci-config-space-type", NULL);
265         const __be32 *regs;
266         struct device_node *parent;
267         struct pci_dn *pdn;
268 #ifdef CONFIG_EEH
269         struct eeh_dev *edev;
270 #endif
271
272         pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
273         if (pdn == NULL)
274                 return NULL;
275         dn->data = pdn;
276         pdn->phb = hose;
277         pdn->pe_number = IODA_INVALID_PE;
278         regs = of_get_property(dn, "reg", NULL);
279         if (regs) {
280                 u32 addr = of_read_number(regs, 1);
281
282                 /* First register entry is addr (00BBSS00)  */
283                 pdn->busno = (addr >> 16) & 0xff;
284                 pdn->devfn = (addr >> 8) & 0xff;
285         }
286
287         /* vendor/device IDs and class code */
288         regs = of_get_property(dn, "vendor-id", NULL);
289         pdn->vendor_id = regs ? of_read_number(regs, 1) : 0;
290         regs = of_get_property(dn, "device-id", NULL);
291         pdn->device_id = regs ? of_read_number(regs, 1) : 0;
292         regs = of_get_property(dn, "class-code", NULL);
293         pdn->class_code = regs ? of_read_number(regs, 1) : 0;
294
295         /* Extended config space */
296         pdn->pci_ext_config_space = (type && of_read_number(type, 1) == 1);
297
298         /* Create EEH device */
299 #ifdef CONFIG_EEH
300         edev = eeh_dev_init(pdn);
301         if (!edev) {
302                 kfree(pdn);
303                 return NULL;
304         }
305 #endif
306
307         /* Attach to parent node */
308         INIT_LIST_HEAD(&pdn->child_list);
309         INIT_LIST_HEAD(&pdn->list);
310         parent = of_get_parent(dn);
311         pdn->parent = parent ? PCI_DN(parent) : NULL;
312         if (pdn->parent)
313                 list_add_tail(&pdn->list, &pdn->parent->child_list);
314
315         return pdn;
316 }
317 EXPORT_SYMBOL_GPL(pci_add_device_node_info);
318
319 void pci_remove_device_node_info(struct device_node *dn)
320 {
321         struct pci_dn *pdn = dn ? PCI_DN(dn) : NULL;
322         struct device_node *parent;
323         struct pci_dev *pdev;
324 #ifdef CONFIG_EEH
325         struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
326
327         if (edev)
328                 edev->pdn = NULL;
329 #endif
330
331         if (!pdn)
332                 return;
333
334         WARN_ON(!list_empty(&pdn->child_list));
335         list_del(&pdn->list);
336
337         /* Drop the parent pci_dn's ref to our backing dt node */
338         parent = of_get_parent(dn);
339         if (parent)
340                 of_node_put(parent);
341
342         /*
343          * At this point we *might* still have a pci_dev that was
344          * instantiated from this pci_dn. So defer free()ing it until
345          * the pci_dev's release function is called.
346          */
347         pdev = pci_get_domain_bus_and_slot(pdn->phb->global_number,
348                         pdn->busno, pdn->devfn);
349         if (pdev) {
350                 /* NB: pdev has a ref to dn */
351                 pci_dbg(pdev, "marked pdn (from %pOF) as dead\n", dn);
352                 pdn->flags |= PCI_DN_FLAG_DEAD;
353         } else {
354                 dn->data = NULL;
355                 kfree(pdn);
356         }
357
358         pci_dev_put(pdev);
359 }
360 EXPORT_SYMBOL_GPL(pci_remove_device_node_info);
361
362 /*
363  * Traverse a device tree stopping each PCI device in the tree.
364  * This is done depth first.  As each node is processed, a "pre"
365  * function is called and the children are processed recursively.
366  *
367  * The "pre" func returns a value.  If non-zero is returned from
368  * the "pre" func, the traversal stops and this value is returned.
369  * This return value is useful when using traverse as a method of
370  * finding a device.
371  *
372  * NOTE: we do not run the func for devices that do not appear to
373  * be PCI except for the start node which we assume (this is good
374  * because the start node is often a phb which may be missing PCI
375  * properties).
376  * We use the class-code as an indicator. If we run into
377  * one of these nodes we also assume its siblings are non-pci for
378  * performance.
379  */
380 void *pci_traverse_device_nodes(struct device_node *start,
381                                 void *(*fn)(struct device_node *, void *),
382                                 void *data)
383 {
384         struct device_node *dn, *nextdn;
385         void *ret;
386
387         /* We started with a phb, iterate all childs */
388         for (dn = start->child; dn; dn = nextdn) {
389                 const __be32 *classp;
390                 u32 class = 0;
391
392                 nextdn = NULL;
393                 classp = of_get_property(dn, "class-code", NULL);
394                 if (classp)
395                         class = of_read_number(classp, 1);
396
397                 if (fn) {
398                         ret = fn(dn, data);
399                         if (ret)
400                                 return ret;
401                 }
402
403                 /* If we are a PCI bridge, go down */
404                 if (dn->child && ((class >> 8) == PCI_CLASS_BRIDGE_PCI ||
405                                   (class >> 8) == PCI_CLASS_BRIDGE_CARDBUS))
406                         /* Depth first...do children */
407                         nextdn = dn->child;
408                 else if (dn->sibling)
409                         /* ok, try next sibling instead. */
410                         nextdn = dn->sibling;
411                 if (!nextdn) {
412                         /* Walk up to next valid sibling. */
413                         do {
414                                 dn = dn->parent;
415                                 if (dn == start)
416                                         return NULL;
417                         } while (dn->sibling == NULL);
418                         nextdn = dn->sibling;
419                 }
420         }
421         return NULL;
422 }
423 EXPORT_SYMBOL_GPL(pci_traverse_device_nodes);
424
425 static struct pci_dn *pci_dn_next_one(struct pci_dn *root,
426                                       struct pci_dn *pdn)
427 {
428         struct list_head *next = pdn->child_list.next;
429
430         if (next != &pdn->child_list)
431                 return list_entry(next, struct pci_dn, list);
432
433         while (1) {
434                 if (pdn == root)
435                         return NULL;
436
437                 next = pdn->list.next;
438                 if (next != &pdn->parent->child_list)
439                         break;
440
441                 pdn = pdn->parent;
442         }
443
444         return list_entry(next, struct pci_dn, list);
445 }
446
447 void *traverse_pci_dn(struct pci_dn *root,
448                       void *(*fn)(struct pci_dn *, void *),
449                       void *data)
450 {
451         struct pci_dn *pdn = root;
452         void *ret;
453
454         /* Only scan the child nodes */
455         for (pdn = pci_dn_next_one(root, pdn); pdn;
456              pdn = pci_dn_next_one(root, pdn)) {
457                 ret = fn(pdn, data);
458                 if (ret)
459                         return ret;
460         }
461
462         return NULL;
463 }
464
465 static void *add_pdn(struct device_node *dn, void *data)
466 {
467         struct pci_controller *hose = data;
468         struct pci_dn *pdn;
469
470         pdn = pci_add_device_node_info(hose, dn);
471         if (!pdn)
472                 return ERR_PTR(-ENOMEM);
473
474         return NULL;
475 }
476
477 /** 
478  * pci_devs_phb_init_dynamic - setup pci devices under this PHB
479  * phb: pci-to-host bridge (top-level bridge connecting to cpu)
480  *
481  * This routine is called both during boot, (before the memory
482  * subsystem is set up, before kmalloc is valid) and during the 
483  * dynamic lpar operation of adding a PHB to a running system.
484  */
485 void pci_devs_phb_init_dynamic(struct pci_controller *phb)
486 {
487         struct device_node *dn = phb->dn;
488         struct pci_dn *pdn;
489
490         /* PHB nodes themselves must not match */
491         pdn = pci_add_device_node_info(phb, dn);
492         if (pdn) {
493                 pdn->devfn = pdn->busno = -1;
494                 pdn->vendor_id = pdn->device_id = pdn->class_code = 0;
495                 pdn->phb = phb;
496                 phb->pci_data = pdn;
497         }
498
499         /* Update dn->phb ptrs for new phb and children devices */
500         pci_traverse_device_nodes(dn, add_pdn, phb);
501 }
502
503 /** 
504  * pci_devs_phb_init - Initialize phbs and pci devs under them.
505  * 
506  * This routine walks over all phb's (pci-host bridges) on the
507  * system, and sets up assorted pci-related structures 
508  * (including pci info in the device node structs) for each
509  * pci device found underneath.  This routine runs once,
510  * early in the boot sequence.
511  */
512 static int __init pci_devs_phb_init(void)
513 {
514         struct pci_controller *phb, *tmp;
515
516         /* This must be done first so the device nodes have valid pci info! */
517         list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
518                 pci_devs_phb_init_dynamic(phb);
519
520         return 0;
521 }
522
523 core_initcall(pci_devs_phb_init);
524
525 static void pci_dev_pdn_setup(struct pci_dev *pdev)
526 {
527         struct pci_dn *pdn;
528
529         if (pdev->dev.archdata.pci_data)
530                 return;
531
532         /* Setup the fast path */
533         pdn = pci_get_pdn(pdev);
534         pdev->dev.archdata.pci_data = pdn;
535 }
536 DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, pci_dev_pdn_setup);