Lines Matching refs:dpc
47 static int dpc_wait_rp_inactive(struct dpc_dev *dpc) in dpc_wait_rp_inactive() argument
50 struct pci_dev *pdev = dpc->dev->port; in dpc_wait_rp_inactive()
51 struct device *dev = &dpc->dev->device; in dpc_wait_rp_inactive()
52 u16 cap = dpc->cap_pos, status; in dpc_wait_rp_inactive()
69 struct dpc_dev *dpc; in dpc_reset_link() local
81 dpc = get_service_data(pciedev); in dpc_reset_link()
82 cap = dpc->cap_pos; in dpc_reset_link()
90 if (dpc->rp_extensions && dpc_wait_rp_inactive(dpc)) in dpc_reset_link()
100 static void dpc_process_rp_pio_error(struct dpc_dev *dpc) in dpc_process_rp_pio_error() argument
102 struct device *dev = &dpc->dev->device; in dpc_process_rp_pio_error()
103 struct pci_dev *pdev = dpc->dev->port; in dpc_process_rp_pio_error()
104 u16 cap = dpc->cap_pos, dpc_status, first_error; in dpc_process_rp_pio_error()
129 if (dpc->rp_log_size < 4) in dpc_process_rp_pio_error()
142 if (dpc->rp_log_size < 5) in dpc_process_rp_pio_error()
147 for (i = 0; i < dpc->rp_log_size - 5; i++) { in dpc_process_rp_pio_error()
159 struct dpc_dev *dpc = context; in dpc_handler() local
160 struct pci_dev *pdev = dpc->dev->port; in dpc_handler()
161 struct device *dev = &dpc->dev->device; in dpc_handler()
162 u16 cap = dpc->cap_pos, status, source, reason, ext_reason; in dpc_handler()
181 if (dpc->rp_extensions && reason == 3 && ext_reason == 0) in dpc_handler()
182 dpc_process_rp_pio_error(dpc); in dpc_handler()
196 struct dpc_dev *dpc = (struct dpc_dev *)context; in dpc_irq() local
197 struct pci_dev *pdev = dpc->dev->port; in dpc_irq()
198 u16 cap = dpc->cap_pos, status; in dpc_irq()
215 struct dpc_dev *dpc; in dpc_probe() local
224 dpc = devm_kzalloc(device, sizeof(*dpc), GFP_KERNEL); in dpc_probe()
225 if (!dpc) in dpc_probe()
228 dpc->cap_pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DPC); in dpc_probe()
229 dpc->dev = dev; in dpc_probe()
230 set_service_data(dev, dpc); in dpc_probe()
234 "pcie-dpc", dpc); in dpc_probe()
241 pci_read_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CAP, &cap); in dpc_probe()
242 pci_read_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, &ctl); in dpc_probe()
244 dpc->rp_extensions = (cap & PCI_EXP_DPC_CAP_RP_EXT); in dpc_probe()
245 if (dpc->rp_extensions) { in dpc_probe()
246 dpc->rp_log_size = (cap & PCI_EXP_DPC_RP_PIO_LOG_SIZE) >> 8; in dpc_probe()
247 if (dpc->rp_log_size < 4 || dpc->rp_log_size > 9) { in dpc_probe()
249 dpc->rp_log_size); in dpc_probe()
250 dpc->rp_log_size = 0; in dpc_probe()
255 pci_write_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, ctl); in dpc_probe()
260 FLAG(cap, PCI_EXP_DPC_CAP_SW_TRIGGER), dpc->rp_log_size, in dpc_probe()
267 struct dpc_dev *dpc = get_service_data(dev); in dpc_remove() local
271 pci_read_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, &ctl); in dpc_remove()
273 pci_write_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, ctl); in dpc_remove()