Lines Matching refs:pp
56 irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
62 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
64 num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
77 irq = irq_find_mapping(pp->irq_domain,
92 struct pcie_port *pp;
96 pp = irq_desc_get_handler_data(desc);
97 dw_handle_msi_irq(pp);
104 struct pcie_port *pp = irq_data_get_irq_chip_data(d);
105 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
108 msi_target = (u64)pp->msi_data;
127 struct pcie_port *pp = irq_data_get_irq_chip_data(d);
128 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
132 raw_spin_lock_irqsave(&pp->lock, flags);
138 pp->irq_mask[ctrl] |= BIT(bit);
139 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]);
141 raw_spin_unlock_irqrestore(&pp->lock, flags);
146 struct pcie_port *pp = irq_data_get_irq_chip_data(d);
147 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
151 raw_spin_lock_irqsave(&pp->lock, flags);
157 pp->irq_mask[ctrl] &= ~BIT(bit);
158 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]);
160 raw_spin_unlock_irqrestore(&pp->lock, flags);
165 struct pcie_port *pp = irq_data_get_irq_chip_data(d);
166 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
189 struct pcie_port *pp = domain->host_data;
194 raw_spin_lock_irqsave(&pp->lock, flags);
196 bit = bitmap_find_free_region(pp->msi_irq_in_use, pp->num_vectors,
199 raw_spin_unlock_irqrestore(&pp->lock, flags);
206 pp->msi_irq_chip,
207 pp, handle_edge_irq,
217 struct pcie_port *pp = domain->host_data;
220 raw_spin_lock_irqsave(&pp->lock, flags);
222 bitmap_release_region(pp->msi_irq_in_use, d->hwirq,
225 raw_spin_unlock_irqrestore(&pp->lock, flags);
233 int dw_pcie_allocate_domains(struct pcie_port *pp)
235 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
238 pp->irq_domain = irq_domain_create_linear(fwnode, pp->num_vectors,
239 &dw_pcie_msi_domain_ops, pp);
240 if (!pp->irq_domain) {
245 irq_domain_update_bus_token(pp->irq_domain, DOMAIN_BUS_NEXUS);
247 pp->msi_domain = pci_msi_create_irq_domain(fwnode,
249 pp->irq_domain);
250 if (!pp->msi_domain) {
252 irq_domain_remove(pp->irq_domain);
259 void dw_pcie_free_msi(struct pcie_port *pp)
261 if (pp->msi_irq) {
262 irq_set_chained_handler(pp->msi_irq, NULL);
263 irq_set_handler_data(pp->msi_irq, NULL);
266 irq_domain_remove(pp->msi_domain);
267 irq_domain_remove(pp->irq_domain);
269 if (pp->msi_data) {
270 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
273 dma_unmap_single_attrs(dev, pp->msi_data, sizeof(pp->msi_msg),
278 void dw_pcie_msi_init(struct pcie_port *pp)
280 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
281 u64 msi_target = (u64)pp->msi_data;
292 int dw_pcie_host_init(struct pcie_port *pp)
294 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
303 raw_spin_lock_init(&pci->pp.lock);
307 pp->cfg0_size = resource_size(cfg_res);
308 pp->cfg0_base = cfg_res->start;
309 } else if (!pp->va_cfg0_base) {
317 pp->bridge = bridge;
323 pp->io_size = resource_size(win->res);
324 pp->io_bus_addr = win->res->start - win->offset;
325 pp->io_base = pci_pio_to_address(win->res->start);
329 pp->cfg0_size = resource_size(win->res);
330 pp->cfg0_base = win->res->start;
333 pp->cfg0_base,
334 pp->cfg0_size);
344 if (!pp->va_cfg0_base) {
345 pp->va_cfg0_base = devm_pci_remap_cfgspace(dev,
346 pp->cfg0_base, pp->cfg0_size);
347 if (!pp->va_cfg0_base) {
366 if (!pp->ops->set_num_vectors) {
367 pp->num_vectors = MSI_DEF_NUM_VECTORS;
369 pp->ops->set_num_vectors(pp);
371 if (pp->num_vectors > MAX_MSI_IRQS ||
372 pp->num_vectors == 0) {
379 if (!pp->ops->msi_host_init) {
380 pp->msi_irq_chip = &dw_pci_msi_bottom_irq_chip;
382 ret = dw_pcie_allocate_domains(pp);
386 if (pp->msi_irq)
387 irq_set_chained_handler_and_data(pp->msi_irq,
389 pp);
391 pp->msi_data = dma_map_single_attrs(pci->dev, &pp->msi_msg,
392 sizeof(pp->msi_msg),
395 ret = dma_mapping_error(pci->dev, pp->msi_data);
398 pp->msi_data = 0;
402 ret = pp->ops->msi_host_init(pp);
412 if (pp->ops->host_init) {
413 ret = pp->ops->host_init(pp);
418 bridge->sysdata = pp;
425 if (pci_msi_enabled() && !pp->ops->msi_host_init)
426 dw_pcie_free_msi(pp);
431 void dw_pcie_host_deinit(struct pcie_port *pp)
433 pci_stop_root_bus(pp->bridge->bus);
434 pci_remove_root_bus(pp->bridge->bus);
435 if (pci_msi_enabled() && !pp->ops->msi_host_init)
436 dw_pcie_free_msi(pp);
445 struct pcie_port *pp = bus->sysdata;
446 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
469 type, pp->cfg0_base,
470 busdev, pp->cfg0_size);
472 return pp->va_cfg0_base + where;
479 struct pcie_port *pp = bus->sysdata;
480 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
486 PCIE_ATU_TYPE_IO, pp->io_base,
487 pp->io_bus_addr, pp->io_size);
496 struct pcie_port *pp = bus->sysdata;
497 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
503 PCIE_ATU_TYPE_IO, pp->io_base,
504 pp->io_bus_addr, pp->io_size);
517 struct pcie_port *pp = bus->sysdata;
518 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
533 void dw_pcie_setup_rc(struct pcie_port *pp)
536 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
546 if (pci_msi_enabled() && !pp->ops->msi_host_init) {
547 num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
551 pp->irq_mask[ctrl] = ~0;
554 pp->irq_mask[ctrl]);
589 if (pp->bridge->child_ops == &dw_child_pcie_ops) {
593 resource_list_for_each_entry(tmp, &pp->bridge->windows)
603 PCIE_ATU_TYPE_IO, pp->io_base,
604 pp->io_bus_addr, pp->io_size);