Lines Matching refs:pdn
48 struct pci_dn *pdn = pci_get_pdn(pdev); in pseries_pcibios_bus_add_device() local
56 pdn->device_id = pdev->device; in pseries_pcibios_bus_add_device()
57 pdn->vendor_id = pdev->vendor; in pseries_pcibios_bus_add_device()
58 pdn->class_code = pdev->class; in pseries_pcibios_bus_add_device()
64 pdn->last_allow_rc = 0; in pseries_pcibios_bus_add_device()
67 pseries_eeh_init_edev(pdn); in pseries_pcibios_bus_add_device()
75 struct eeh_dev *edev = pdn_to_eeh_dev(pdn); in pseries_pcibios_bus_add_device()
77 edev->pe_config_addr = (pdn->busno << 16) | (pdn->devfn << 8); in pseries_pcibios_bus_add_device()
99 static int pseries_eeh_get_pe_config_addr(struct pci_dn *pdn) in pseries_eeh_get_pe_config_addr() argument
101 int config_addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); in pseries_eeh_get_pe_config_addr()
102 struct pci_controller *phb = pdn->phb; in pseries_eeh_get_pe_config_addr()
246 static int pseries_eeh_cap_start(struct pci_dn *pdn) in pseries_eeh_cap_start() argument
250 if (!pdn) in pseries_eeh_cap_start()
253 rtas_read_config(pdn, PCI_STATUS, 2, &status); in pseries_eeh_cap_start()
261 static int pseries_eeh_find_cap(struct pci_dn *pdn, int cap) in pseries_eeh_find_cap() argument
263 int pos = pseries_eeh_cap_start(pdn); in pseries_eeh_find_cap()
271 rtas_read_config(pdn, pos, 1, &pos); in pseries_eeh_find_cap()
275 rtas_read_config(pdn, pos + PCI_CAP_LIST_ID, 1, &id); in pseries_eeh_find_cap()
286 static int pseries_eeh_find_ecap(struct pci_dn *pdn, int cap) in pseries_eeh_find_ecap() argument
288 struct eeh_dev *edev = pdn_to_eeh_dev(pdn); in pseries_eeh_find_ecap()
295 if (rtas_read_config(pdn, pos, 4, &header) != PCIBIOS_SUCCESSFUL) in pseries_eeh_find_ecap()
308 if (rtas_read_config(pdn, pos, 4, &header) != PCIBIOS_SUCCESSFUL) in pseries_eeh_find_ecap()
326 struct pci_dn *pdn = eeh_dev_to_pdn(edev); in pseries_eeh_pe_get_parent() local
334 pdn = pci_get_pdn(edev->physfn); in pseries_eeh_pe_get_parent()
336 pdn = pdn ? pdn->parent : NULL; in pseries_eeh_pe_get_parent()
337 while (pdn) { in pseries_eeh_pe_get_parent()
339 parent = pdn_to_eeh_dev(pdn); in pseries_eeh_pe_get_parent()
346 pdn = pdn->parent; in pseries_eeh_pe_get_parent()
362 void pseries_eeh_init_edev(struct pci_dn *pdn) in pseries_eeh_init_edev() argument
378 edev = pdn_to_eeh_dev(pdn); in pseries_eeh_init_edev()
392 if (!pdn->vendor_id || !pdn->device_id || !pdn->class_code) in pseries_eeh_init_edev()
396 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_ISA) in pseries_eeh_init_edev()
406 edev->pcix_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_PCIX); in pseries_eeh_init_edev()
407 edev->pcie_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_EXP); in pseries_eeh_init_edev()
408 edev->aer_cap = pseries_eeh_find_ecap(pdn, PCI_EXT_CAP_ID_ERR); in pseries_eeh_init_edev()
410 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) { in pseries_eeh_init_edev()
413 rtas_read_config(pdn, edev->pcie_cap + PCI_EXP_FLAGS, in pseries_eeh_init_edev()
424 ret = pseries_eeh_get_pe_config_addr(pdn); in pseries_eeh_init_edev()
432 pe.phb = pdn->phb; in pseries_eeh_init_edev()
460 struct pci_dn *pdn; in pseries_eeh_probe() local
462 pdn = pci_get_pdn_by_devfn(pdev->bus, pdev->devfn); in pseries_eeh_probe()
463 if (!pdn) in pseries_eeh_probe()
470 edev = pdn_to_eeh_dev(pdn); in pseries_eeh_probe()
485 void pseries_eeh_init_edev_recursive(struct pci_dn *pdn) in pseries_eeh_init_edev_recursive() argument
489 if (!pdn) in pseries_eeh_init_edev_recursive()
492 list_for_each_entry(n, &pdn->child_list, list) in pseries_eeh_init_edev_recursive()
495 pseries_eeh_init_edev(pdn); in pseries_eeh_init_edev_recursive()
675 struct pci_dn *pdn = eeh_dev_to_pdn(edev); in pseries_eeh_read_config() local
677 return rtas_read_config(pdn, where, size, val); in pseries_eeh_read_config()
691 struct pci_dn *pdn = eeh_dev_to_pdn(edev); in pseries_eeh_write_config() local
693 return rtas_write_config(pdn, where, size, val); in pseries_eeh_write_config()
697 static int pseries_send_allow_unfreeze(struct pci_dn *pdn, u16 *vf_pe_array, int cur_vfs) in pseries_send_allow_unfreeze() argument
703 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); in pseries_send_allow_unfreeze()
704 buid = pdn->phb->buid; in pseries_send_allow_unfreeze()
716 pdn->phb->global_number, addr, rc); in pseries_send_allow_unfreeze()
723 struct pci_dn *pdn, *tmp, *parent, *physfn_pdn; in pseries_call_allow_unfreeze() local
732 pdn = eeh_dev_to_pdn(edev); in pseries_call_allow_unfreeze()
733 parent = pdn->parent; in pseries_call_allow_unfreeze()
736 cpu_to_be16(pdn->pe_num_map[vf_index]); in pseries_call_allow_unfreeze()
737 rc = pseries_send_allow_unfreeze(pdn, vf_pe_array, in pseries_call_allow_unfreeze()
739 pdn->last_allow_rc = rc; in pseries_call_allow_unfreeze()
741 list_for_each_entry_safe(pdn, tmp, in pseries_call_allow_unfreeze()
748 if (pdn->busno != bus || in pseries_call_allow_unfreeze()
749 pdn->devfn != devfn) in pseries_call_allow_unfreeze()
751 pdn->last_allow_rc = rc; in pseries_call_allow_unfreeze()
755 pdn = pci_get_pdn(edev->pdev); in pseries_call_allow_unfreeze()
762 pdn->last_allow_rc = rc; in pseries_call_allow_unfreeze()
812 struct pci_dn *pdn; in eeh_pseries_init() local
864 pdn = list_first_entry(&PCI_DN(phb->dn)->child_list, struct pci_dn, list); in eeh_pseries_init()
865 config_addr = pseries_eeh_get_pe_config_addr(pdn); in eeh_pseries_init()