Lines Matching refs:port

129 static inline u32 pcie_read(struct xilinx_pcie_port *port, u32 reg)  in pcie_read()  argument
131 return readl(port->reg_base + reg); in pcie_read()
134 static inline void pcie_write(struct xilinx_pcie_port *port, u32 val, u32 reg) in pcie_write() argument
136 writel(val, port->reg_base + reg); in pcie_write()
139 static inline bool xilinx_pcie_link_is_up(struct xilinx_pcie_port *port) in xilinx_pcie_link_is_up() argument
141 return (pcie_read(port, XILINX_PCIE_REG_PSCR) & in xilinx_pcie_link_is_up()
149 static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie_port *port) in xilinx_pcie_clear_err_interrupts() argument
151 unsigned long val = pcie_read(port, XILINX_PCIE_REG_RPEFR); in xilinx_pcie_clear_err_interrupts()
154 dev_dbg(port->dev, "Requester ID %lu\n", in xilinx_pcie_clear_err_interrupts()
156 pcie_write(port, XILINX_PCIE_RPEFR_ALL_MASK, in xilinx_pcie_clear_err_interrupts()
170 struct xilinx_pcie_port *port = sys_to_pcie(bus->sysdata); in xilinx_pcie_valid_device() local
173 if (bus->number != port->root_busno) in xilinx_pcie_valid_device()
174 if (!xilinx_pcie_link_is_up(port)) in xilinx_pcie_valid_device()
178 if (bus->number == port->root_busno && devfn > 0) in xilinx_pcie_valid_device()
185 if (bus->primary == port->root_busno && devfn > 0) in xilinx_pcie_valid_device()
203 struct xilinx_pcie_port *port = sys_to_pcie(bus->sysdata); in xilinx_pcie_map_bus() local
212 return port->reg_base + relbus + where; in xilinx_pcie_map_bus()
232 struct xilinx_pcie_port *port; in xilinx_pcie_destroy_msi() local
236 port = sys_to_pcie(msi->dev->bus->sysdata); in xilinx_pcie_destroy_msi()
239 dev_err(port->dev, "Trying to free unused MSI#%d\n", irq); in xilinx_pcie_destroy_msi()
250 static int xilinx_pcie_assign_msi(struct xilinx_pcie_port *port) in xilinx_pcie_assign_msi() argument
286 struct xilinx_pcie_port *port = sys_to_pcie(pdev->bus->sysdata); in xilinx_pcie_msi_setup_irq() local
292 hwirq = xilinx_pcie_assign_msi(port); in xilinx_pcie_msi_setup_irq()
296 irq = irq_create_mapping(port->irq_domain, hwirq); in xilinx_pcie_msi_setup_irq()
302 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_msi_setup_irq()
355 static void xilinx_pcie_enable_msi(struct xilinx_pcie_port *port) in xilinx_pcie_enable_msi() argument
359 port->msi_pages = __get_free_pages(GFP_KERNEL, 0); in xilinx_pcie_enable_msi()
360 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_enable_msi()
361 pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1); in xilinx_pcie_enable_msi()
362 pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2); in xilinx_pcie_enable_msi()
401 struct xilinx_pcie_port *port = (struct xilinx_pcie_port *)data; in xilinx_pcie_intr_handler() local
405 val = pcie_read(port, XILINX_PCIE_REG_IDR); in xilinx_pcie_intr_handler()
406 mask = pcie_read(port, XILINX_PCIE_REG_IMR); in xilinx_pcie_intr_handler()
413 dev_warn(port->dev, "Link Down\n"); in xilinx_pcie_intr_handler()
416 dev_warn(port->dev, "ECRC failed\n"); in xilinx_pcie_intr_handler()
419 dev_warn(port->dev, "Streaming error\n"); in xilinx_pcie_intr_handler()
422 dev_info(port->dev, "Hot reset\n"); in xilinx_pcie_intr_handler()
425 dev_warn(port->dev, "ECAM access timeout\n"); in xilinx_pcie_intr_handler()
428 dev_warn(port->dev, "Correctable error message\n"); in xilinx_pcie_intr_handler()
429 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
433 dev_warn(port->dev, "Non fatal error message\n"); in xilinx_pcie_intr_handler()
434 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
438 dev_warn(port->dev, "Fatal error message\n"); in xilinx_pcie_intr_handler()
439 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
444 val = pcie_read(port, XILINX_PCIE_REG_RPIFR1); in xilinx_pcie_intr_handler()
448 dev_warn(port->dev, "RP Intr FIFO1 read error\n"); in xilinx_pcie_intr_handler()
453 pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK, in xilinx_pcie_intr_handler()
459 generic_handle_irq(irq_find_mapping(port->irq_domain, val)); in xilinx_pcie_intr_handler()
464 val = pcie_read(port, XILINX_PCIE_REG_RPIFR1); in xilinx_pcie_intr_handler()
467 dev_warn(port->dev, "RP Intr FIFO1 read error\n"); in xilinx_pcie_intr_handler()
472 msi_data = pcie_read(port, XILINX_PCIE_REG_RPIFR2) & in xilinx_pcie_intr_handler()
476 pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK, in xilinx_pcie_intr_handler()
487 dev_warn(port->dev, "Slave unsupported request\n"); in xilinx_pcie_intr_handler()
490 dev_warn(port->dev, "Slave unexpected completion\n"); in xilinx_pcie_intr_handler()
493 dev_warn(port->dev, "Slave completion timeout\n"); in xilinx_pcie_intr_handler()
496 dev_warn(port->dev, "Slave Error Poison\n"); in xilinx_pcie_intr_handler()
499 dev_warn(port->dev, "Slave Completer Abort\n"); in xilinx_pcie_intr_handler()
502 dev_warn(port->dev, "Slave Illegal Burst\n"); in xilinx_pcie_intr_handler()
505 dev_warn(port->dev, "Master decode error\n"); in xilinx_pcie_intr_handler()
508 dev_warn(port->dev, "Master slave error\n"); in xilinx_pcie_intr_handler()
511 dev_warn(port->dev, "Master error poison\n"); in xilinx_pcie_intr_handler()
514 pcie_write(port, status, XILINX_PCIE_REG_IDR); in xilinx_pcie_intr_handler()
523 static void xilinx_pcie_free_irq_domain(struct xilinx_pcie_port *port) in xilinx_pcie_free_irq_domain() argument
531 free_pages(port->msi_pages, 0); in xilinx_pcie_free_irq_domain()
540 irq = irq_find_mapping(port->irq_domain, i); in xilinx_pcie_free_irq_domain()
545 irq_domain_remove(port->irq_domain); in xilinx_pcie_free_irq_domain()
554 static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) in xilinx_pcie_init_irq_domain() argument
556 struct device *dev = port->dev; in xilinx_pcie_init_irq_domain()
567 port->irq_domain = irq_domain_add_linear(pcie_intc_node, 4, in xilinx_pcie_init_irq_domain()
569 port); in xilinx_pcie_init_irq_domain()
570 if (!port->irq_domain) { in xilinx_pcie_init_irq_domain()
572 return PTR_ERR(port->irq_domain); in xilinx_pcie_init_irq_domain()
577 port->irq_domain = irq_domain_add_linear(node, in xilinx_pcie_init_irq_domain()
581 if (!port->irq_domain) { in xilinx_pcie_init_irq_domain()
583 return PTR_ERR(port->irq_domain); in xilinx_pcie_init_irq_domain()
586 xilinx_pcie_enable_msi(port); in xilinx_pcie_init_irq_domain()
596 static void xilinx_pcie_init_port(struct xilinx_pcie_port *port) in xilinx_pcie_init_port() argument
598 if (xilinx_pcie_link_is_up(port)) in xilinx_pcie_init_port()
599 dev_info(port->dev, "PCIe Link is UP\n"); in xilinx_pcie_init_port()
601 dev_info(port->dev, "PCIe Link is DOWN\n"); in xilinx_pcie_init_port()
604 pcie_write(port, ~XILINX_PCIE_IDR_ALL_MASK, in xilinx_pcie_init_port()
608 pcie_write(port, pcie_read(port, XILINX_PCIE_REG_IDR) & in xilinx_pcie_init_port()
613 pcie_write(port, XILINX_PCIE_IMR_ALL_MASK, XILINX_PCIE_REG_IMR); in xilinx_pcie_init_port()
616 pcie_write(port, pcie_read(port, XILINX_PCIE_REG_RPSC) | in xilinx_pcie_init_port()
630 struct xilinx_pcie_port *port = sys_to_pcie(sys); in xilinx_pcie_setup() local
632 list_splice_init(&port->resources, &sys->resources); in xilinx_pcie_setup()
646 struct xilinx_pcie_port *port = sys_to_pcie(sys); in xilinx_pcie_scan_bus() local
649 port->root_busno = sys->busnr; in xilinx_pcie_scan_bus()
650 bus = pci_scan_root_bus(port->dev, sys->busnr, &xilinx_pcie_ops, in xilinx_pcie_scan_bus()
662 static int xilinx_pcie_parse_and_add_res(struct xilinx_pcie_port *port) in xilinx_pcie_parse_and_add_res() argument
664 struct device *dev = port->dev; in xilinx_pcie_parse_and_add_res()
714 pci_add_resource_offset(&port->resources, mem, offset); in xilinx_pcie_parse_and_add_res()
718 if (of_pci_parse_bus_range(node, &port->bus_range)) { in xilinx_pcie_parse_and_add_res()
719 u32 val = pcie_read(port, XILINX_PCIE_REG_BIR); in xilinx_pcie_parse_and_add_res()
725 port->bus_range = (struct resource) { in xilinx_pcie_parse_and_add_res()
734 pci_add_resource(&port->resources, &port->bus_range); in xilinx_pcie_parse_and_add_res()
740 resource_list_for_each_entry(win, &port->resources) in xilinx_pcie_parse_and_add_res()
742 pci_free_resource_list(&port->resources); in xilinx_pcie_parse_and_add_res()
753 static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port) in xilinx_pcie_parse_dt() argument
755 struct device *dev = port->dev; in xilinx_pcie_parse_dt()
773 port->reg_base = devm_ioremap_resource(dev, &regs); in xilinx_pcie_parse_dt()
774 if (IS_ERR(port->reg_base)) in xilinx_pcie_parse_dt()
775 return PTR_ERR(port->reg_base); in xilinx_pcie_parse_dt()
777 port->irq = irq_of_parse_and_map(node, 0); in xilinx_pcie_parse_dt()
778 err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler, in xilinx_pcie_parse_dt()
780 "xilinx-pcie", port); in xilinx_pcie_parse_dt()
782 dev_err(dev, "unable to request irq %d\n", port->irq); in xilinx_pcie_parse_dt()
797 struct xilinx_pcie_port *port; in xilinx_pcie_probe() local
805 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); in xilinx_pcie_probe()
806 if (!port) in xilinx_pcie_probe()
809 port->dev = dev; in xilinx_pcie_probe()
811 err = xilinx_pcie_parse_dt(port); in xilinx_pcie_probe()
817 xilinx_pcie_init_port(port); in xilinx_pcie_probe()
819 err = xilinx_pcie_init_irq_domain(port); in xilinx_pcie_probe()
829 INIT_LIST_HEAD(&port->resources); in xilinx_pcie_probe()
830 err = xilinx_pcie_parse_and_add_res(port); in xilinx_pcie_probe()
836 platform_set_drvdata(pdev, port); in xilinx_pcie_probe()
842 .private_data = (void **)&port, in xilinx_pcie_probe()
850 xilinx_pcie_msi_chip.dev = port->dev; in xilinx_pcie_probe()
866 struct xilinx_pcie_port *port = platform_get_drvdata(pdev); in xilinx_pcie_remove() local
868 xilinx_pcie_free_irq_domain(port); in xilinx_pcie_remove()