Lines Matching +full:control +full:- +full:parent
2 * Copyright (c) 2010 - 2017 Intel Corporation. All rights reserved.
15 * - Redistributions of source code must retain the above
19 * - Redistributions in binary form must reproduce the above
51 * from qib_pcie_params, which every chip-specific
82 qib_early_err(&pdev->dev, "pci enable failed: error %d\n", in qib_pcie_init()
83 -ret); in qib_pcie_init()
89 qib_devinfo(pdev, "pci_request_regions fails: err %d\n", -ret); in qib_pcie_init()
109 qib_early_err(&pdev->dev, in qib_pcie_init()
117 qib_early_err(&pdev->dev, in qib_pcie_init()
133 * fields required to re-initialize after a chip reset, or for
142 dd->pcidev = pdev; in qib_pcie_ddinit()
148 dd->kregbase = ioremap(addr, len); in qib_pcie_ddinit()
149 if (!dd->kregbase) in qib_pcie_ddinit()
150 return -ENOMEM; in qib_pcie_ddinit()
152 dd->kregend = (u64 __iomem *)((void __iomem *) dd->kregbase + len); in qib_pcie_ddinit()
153 dd->physaddr = addr; /* used for io_remap, etc. */ in qib_pcie_ddinit()
159 dd->pcibar0 = addr; in qib_pcie_ddinit()
160 dd->pcibar1 = addr >> 32; in qib_pcie_ddinit()
161 dd->deviceid = ent->device; /* save for later use */ in qib_pcie_ddinit()
162 dd->vendorid = ent->vendor; in qib_pcie_ddinit()
168 * Do PCIe cleanup, after chip-specific cleanup, etc. Just prior
174 u64 __iomem *base = (void __iomem *) dd->kregbase; in qib_pcie_ddcleanup()
176 dd->kregbase = NULL; in qib_pcie_ddcleanup()
178 if (dd->piobase) in qib_pcie_ddcleanup()
179 iounmap(dd->piobase); in qib_pcie_ddcleanup()
180 if (dd->userbase) in qib_pcie_ddcleanup()
181 iounmap(dd->userbase); in qib_pcie_ddcleanup()
182 if (dd->piovl15base) in qib_pcie_ddcleanup()
183 iounmap(dd->piovl15base); in qib_pcie_ddcleanup()
185 pci_disable_device(dd->pcidev); in qib_pcie_ddcleanup()
186 pci_release_regions(dd->pcidev); in qib_pcie_ddcleanup()
188 pci_set_drvdata(dd->pcidev, NULL); in qib_pcie_ddcleanup()
198 struct pci_dev *pdev = dd->pcidev; in qib_cache_msi_info()
199 u16 control; in qib_cache_msi_info() local
201 pci_read_config_dword(pdev, pos + PCI_MSI_ADDRESS_LO, &dd->msi_lo); in qib_cache_msi_info()
202 pci_read_config_dword(pdev, pos + PCI_MSI_ADDRESS_HI, &dd->msi_hi); in qib_cache_msi_info()
203 pci_read_config_word(pdev, pos + PCI_MSI_FLAGS, &control); in qib_cache_msi_info()
207 pos + ((control & PCI_MSI_FLAGS_64BIT) ? 12 : 8), in qib_cache_msi_info()
208 &dd->msi_data); in qib_cache_msi_info()
218 if (!pci_is_pcie(dd->pcidev)) { in qib_pcie_params()
221 dd->lbus_width = 1; in qib_pcie_params()
222 dd->lbus_speed = 2500; /* Gen1, 2.5GHz */ in qib_pcie_params()
223 nvec = -1; in qib_pcie_params()
227 if (dd->flags & QIB_HAS_INTX) in qib_pcie_params()
230 nvec = pci_alloc_irq_vectors(dd->pcidev, 1, maxvec, flags); in qib_pcie_params()
240 *nent = !dd->pcidev->msix_enabled ? 0 : nvec; in qib_pcie_params()
242 if (dd->pcidev->msi_enabled) in qib_pcie_params()
243 qib_cache_msi_info(dd, dd->pcidev->msi_cap); in qib_pcie_params()
245 pcie_capability_read_word(dd->pcidev, PCI_EXP_LNKSTA, &linkstat); in qib_pcie_params()
247 * speed is bits 0-3, linkwidth is bits 4-8 in qib_pcie_params()
253 dd->lbus_width = linkstat; in qib_pcie_params()
257 dd->lbus_speed = 2500; /* Gen1, 2.5GHz */ in qib_pcie_params()
260 dd->lbus_speed = 5000; /* Gen1, 5GHz */ in qib_pcie_params()
263 dd->lbus_speed = 2500; in qib_pcie_params()
282 snprintf(dd->lbus_info, sizeof(dd->lbus_info), in qib_pcie_params()
283 "PCIe,%uMHz,x%u\n", dd->lbus_speed, dd->lbus_width); in qib_pcie_params()
288 * qib_free_irq - Cleanup INTx and MSI interrupts
297 pci_free_irq(dd->pcidev, 0, dd); in qib_free_irq()
298 pci_free_irq_vectors(dd->pcidev); in qib_free_irq()
312 u16 control; in qib_reinit_intr() local
316 if (!dd->msi_lo) in qib_reinit_intr()
319 pos = dd->pcidev->msi_cap; in qib_reinit_intr()
327 pci_write_config_dword(dd->pcidev, pos + PCI_MSI_ADDRESS_LO, in qib_reinit_intr()
328 dd->msi_lo); in qib_reinit_intr()
329 pci_write_config_dword(dd->pcidev, pos + PCI_MSI_ADDRESS_HI, in qib_reinit_intr()
330 dd->msi_hi); in qib_reinit_intr()
331 pci_read_config_word(dd->pcidev, pos + PCI_MSI_FLAGS, &control); in qib_reinit_intr()
332 if (!(control & PCI_MSI_FLAGS_ENABLE)) { in qib_reinit_intr()
333 control |= PCI_MSI_FLAGS_ENABLE; in qib_reinit_intr()
334 pci_write_config_word(dd->pcidev, pos + PCI_MSI_FLAGS, in qib_reinit_intr()
335 control); in qib_reinit_intr()
338 pci_write_config_word(dd->pcidev, pos + in qib_reinit_intr()
339 ((control & PCI_MSI_FLAGS_64BIT) ? 12 : 8), in qib_reinit_intr()
340 dd->msi_data); in qib_reinit_intr()
345 if (!ret && (dd->flags & QIB_HAS_INTX)) in qib_reinit_intr()
349 pci_set_master(dd->pcidev); in qib_reinit_intr()
356 * to move all the pcie code out of the chip-specific driver code.
360 pci_read_config_word(dd->pcidev, PCI_COMMAND, cmd); in qib_pcie_getcmd()
361 pci_read_config_byte(dd->pcidev, PCI_INTERRUPT_LINE, iline); in qib_pcie_getcmd()
362 pci_read_config_byte(dd->pcidev, PCI_CACHE_LINE_SIZE, cline); in qib_pcie_getcmd()
369 r = pci_write_config_dword(dd->pcidev, PCI_BASE_ADDRESS_0, in qib_pcie_reenable()
370 dd->pcibar0); in qib_pcie_reenable()
373 r = pci_write_config_dword(dd->pcidev, PCI_BASE_ADDRESS_1, in qib_pcie_reenable()
374 dd->pcibar1); in qib_pcie_reenable()
377 /* now re-enable memory access, and restore cosmetic settings */ in qib_pcie_reenable()
378 pci_write_config_word(dd->pcidev, PCI_COMMAND, cmd); in qib_pcie_reenable()
379 pci_write_config_byte(dd->pcidev, PCI_INTERRUPT_LINE, iline); in qib_pcie_reenable()
380 pci_write_config_byte(dd->pcidev, PCI_CACHE_LINE_SIZE, cline); in qib_pcie_reenable()
381 r = pci_enable_device(dd->pcidev); in qib_pcie_reenable()
400 struct pci_dev *parent; in qib_tune_pcie_coalesce() local
407 /* Find out supported and configured values for parent (root) */ in qib_tune_pcie_coalesce()
408 parent = dd->pcidev->bus->self; in qib_tune_pcie_coalesce()
409 if (parent->bus->parent) { in qib_tune_pcie_coalesce()
410 qib_devinfo(dd->pcidev, "Parent not root\n"); in qib_tune_pcie_coalesce()
413 if (!pci_is_pcie(parent)) in qib_tune_pcie_coalesce()
415 if (parent->vendor != 0x8086) in qib_tune_pcie_coalesce()
419 * - bit 12: Max_rdcmp_Imt_EN: need to set to 1 in qib_tune_pcie_coalesce()
420 * - bit 11: COALESCE_FORCE: need to set to 0 in qib_tune_pcie_coalesce()
421 * - bit 10: COALESCE_EN: need to set to 1 in qib_tune_pcie_coalesce()
425 * also: - bit 25:24: COALESCE_MODE, need to set to 0 in qib_tune_pcie_coalesce()
427 devid = parent->device; in qib_tune_pcie_coalesce()
430 if (parent->revision <= 0xb2) in qib_tune_pcie_coalesce()
451 pci_read_config_dword(parent, 0x48, &val); in qib_tune_pcie_coalesce()
454 pci_write_config_dword(parent, 0x48, val); in qib_tune_pcie_coalesce()
458 * BIOS may not set PCIe bus-utilization parameters for best performance.
467 struct pci_dev *parent; in qib_tune_pcie_caps() local
471 /* Find out supported and configured values for parent (root) */ in qib_tune_pcie_caps()
472 parent = dd->pcidev->bus->self; in qib_tune_pcie_caps()
473 if (!pci_is_root_bus(parent->bus)) { in qib_tune_pcie_caps()
474 qib_devinfo(dd->pcidev, "Parent not root\n"); in qib_tune_pcie_caps()
478 if (!pci_is_pcie(parent) || !pci_is_pcie(dd->pcidev)) in qib_tune_pcie_caps()
481 rc_mpss = parent->pcie_mpss; in qib_tune_pcie_caps()
482 rc_mps = ffs(pcie_get_mps(parent)) - 8; in qib_tune_pcie_caps()
484 ep_mpss = dd->pcidev->pcie_mpss; in qib_tune_pcie_caps()
485 ep_mps = ffs(pcie_get_mps(dd->pcidev)) - 8; in qib_tune_pcie_caps()
497 pcie_set_mps(parent, 128 << rc_mps); in qib_tune_pcie_caps()
502 pcie_set_mps(dd->pcidev, 128 << ep_mps); in qib_tune_pcie_caps()
508 * which is code '5' (log2(4096) - 7) in qib_tune_pcie_caps()
515 rc_mrrs = pcie_get_readrq(parent); in qib_tune_pcie_caps()
516 ep_mrrs = pcie_get_readrq(dd->pcidev); in qib_tune_pcie_caps()
520 pcie_set_readrq(parent, rc_mrrs); in qib_tune_pcie_caps()
524 pcie_set_readrq(dd->pcidev, ep_mrrs); in qib_tune_pcie_caps()
554 dd->flags &= ~QIB_PRESENT; in qib_pci_error_detected()
576 if (dd && dd->pport) { in qib_pci_mmio_enabled()
577 words = dd->f_portcntr(dd->pport, QIBPORTCNTR_WORDRCV); in qib_pci_mmio_enabled()
602 * unlike sysfs-requested reset. Better than in qib_pci_resume()
605 qib_init(dd, 1); /* same as re-init after reset */ in qib_pci_resume()