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()
231 struct xilinx_pcie_port *port; in xilinx_pcie_destroy_msi() local
235 port = sys_to_pcie(msi_desc_to_pci_sysdata(msi)); in xilinx_pcie_destroy_msi()
236 dev_err(port->dev, "Trying to free unused MSI#%d\n", irq); in xilinx_pcie_destroy_msi()
248 static int xilinx_pcie_assign_msi(struct xilinx_pcie_port *port) in xilinx_pcie_assign_msi() argument
284 struct xilinx_pcie_port *port = sys_to_pcie(pdev->bus->sysdata); in xilinx_pcie_msi_setup_irq() local
290 hwirq = xilinx_pcie_assign_msi(port); in xilinx_pcie_msi_setup_irq()
294 irq = irq_create_mapping(port->irq_domain, hwirq); in xilinx_pcie_msi_setup_irq()
300 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_msi_setup_irq()
352 static void xilinx_pcie_enable_msi(struct xilinx_pcie_port *port) in xilinx_pcie_enable_msi() argument
356 port->msi_pages = __get_free_pages(GFP_KERNEL, 0); in xilinx_pcie_enable_msi()
357 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_enable_msi()
358 pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1); in xilinx_pcie_enable_msi()
359 pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2); in xilinx_pcie_enable_msi()
397 struct xilinx_pcie_port *port = (struct xilinx_pcie_port *)data; in xilinx_pcie_intr_handler() local
401 val = pcie_read(port, XILINX_PCIE_REG_IDR); in xilinx_pcie_intr_handler()
402 mask = pcie_read(port, XILINX_PCIE_REG_IMR); in xilinx_pcie_intr_handler()
409 dev_warn(port->dev, "Link Down\n"); in xilinx_pcie_intr_handler()
412 dev_warn(port->dev, "ECRC failed\n"); in xilinx_pcie_intr_handler()
415 dev_warn(port->dev, "Streaming error\n"); in xilinx_pcie_intr_handler()
418 dev_info(port->dev, "Hot reset\n"); in xilinx_pcie_intr_handler()
421 dev_warn(port->dev, "ECAM access timeout\n"); in xilinx_pcie_intr_handler()
424 dev_warn(port->dev, "Correctable error message\n"); in xilinx_pcie_intr_handler()
425 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
429 dev_warn(port->dev, "Non fatal error message\n"); in xilinx_pcie_intr_handler()
430 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
434 dev_warn(port->dev, "Fatal error message\n"); in xilinx_pcie_intr_handler()
435 xilinx_pcie_clear_err_interrupts(port); in xilinx_pcie_intr_handler()
440 val = pcie_read(port, XILINX_PCIE_REG_RPIFR1); in xilinx_pcie_intr_handler()
444 dev_warn(port->dev, "RP Intr FIFO1 read error\n"); in xilinx_pcie_intr_handler()
450 pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK, in xilinx_pcie_intr_handler()
456 generic_handle_irq(irq_find_mapping(port->irq_domain, in xilinx_pcie_intr_handler()
463 val = pcie_read(port, XILINX_PCIE_REG_RPIFR1); in xilinx_pcie_intr_handler()
466 dev_warn(port->dev, "RP Intr FIFO1 read error\n"); in xilinx_pcie_intr_handler()
471 msi_data = pcie_read(port, XILINX_PCIE_REG_RPIFR2) & in xilinx_pcie_intr_handler()
475 pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK, in xilinx_pcie_intr_handler()
486 dev_warn(port->dev, "Slave unsupported request\n"); in xilinx_pcie_intr_handler()
489 dev_warn(port->dev, "Slave unexpected completion\n"); in xilinx_pcie_intr_handler()
492 dev_warn(port->dev, "Slave completion timeout\n"); in xilinx_pcie_intr_handler()
495 dev_warn(port->dev, "Slave Error Poison\n"); in xilinx_pcie_intr_handler()
498 dev_warn(port->dev, "Slave Completer Abort\n"); in xilinx_pcie_intr_handler()
501 dev_warn(port->dev, "Slave Illegal Burst\n"); in xilinx_pcie_intr_handler()
504 dev_warn(port->dev, "Master decode error\n"); in xilinx_pcie_intr_handler()
507 dev_warn(port->dev, "Master slave error\n"); in xilinx_pcie_intr_handler()
510 dev_warn(port->dev, "Master error poison\n"); in xilinx_pcie_intr_handler()
513 pcie_write(port, status, XILINX_PCIE_REG_IDR); in xilinx_pcie_intr_handler()
522 static void xilinx_pcie_free_irq_domain(struct xilinx_pcie_port *port) in xilinx_pcie_free_irq_domain() argument
530 free_pages(port->msi_pages, 0); in xilinx_pcie_free_irq_domain()
539 irq = irq_find_mapping(port->irq_domain, i); in xilinx_pcie_free_irq_domain()
544 irq_domain_remove(port->irq_domain); in xilinx_pcie_free_irq_domain()
553 static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) in xilinx_pcie_init_irq_domain() argument
555 struct device *dev = port->dev; in xilinx_pcie_init_irq_domain()
566 port->irq_domain = irq_domain_add_linear(pcie_intc_node, 4, in xilinx_pcie_init_irq_domain()
568 port); in xilinx_pcie_init_irq_domain()
569 if (!port->irq_domain) { in xilinx_pcie_init_irq_domain()
571 return PTR_ERR(port->irq_domain); in xilinx_pcie_init_irq_domain()
576 port->irq_domain = irq_domain_add_linear(node, in xilinx_pcie_init_irq_domain()
580 if (!port->irq_domain) { in xilinx_pcie_init_irq_domain()
582 return PTR_ERR(port->irq_domain); in xilinx_pcie_init_irq_domain()
585 xilinx_pcie_enable_msi(port); in xilinx_pcie_init_irq_domain()
595 static void xilinx_pcie_init_port(struct xilinx_pcie_port *port) in xilinx_pcie_init_port() argument
597 if (xilinx_pcie_link_is_up(port)) in xilinx_pcie_init_port()
598 dev_info(port->dev, "PCIe Link is UP\n"); in xilinx_pcie_init_port()
600 dev_info(port->dev, "PCIe Link is DOWN\n"); in xilinx_pcie_init_port()
603 pcie_write(port, ~XILINX_PCIE_IDR_ALL_MASK, in xilinx_pcie_init_port()
607 pcie_write(port, pcie_read(port, XILINX_PCIE_REG_IDR) & in xilinx_pcie_init_port()
612 pcie_write(port, XILINX_PCIE_IMR_ALL_MASK, XILINX_PCIE_REG_IMR); in xilinx_pcie_init_port()
615 pcie_write(port, pcie_read(port, XILINX_PCIE_REG_RPSC) | in xilinx_pcie_init_port()
629 struct xilinx_pcie_port *port = sys_to_pcie(sys); in xilinx_pcie_setup() local
631 list_splice_init(&port->resources, &sys->resources); in xilinx_pcie_setup()
645 struct xilinx_pcie_port *port = sys_to_pcie(sys); in xilinx_pcie_scan_bus() local
648 port->root_busno = sys->busnr; in xilinx_pcie_scan_bus()
651 bus = pci_scan_root_bus_msi(port->dev, sys->busnr, in xilinx_pcie_scan_bus()
656 bus = pci_scan_root_bus(port->dev, sys->busnr, in xilinx_pcie_scan_bus()
667 static int xilinx_pcie_parse_and_add_res(struct xilinx_pcie_port *port) in xilinx_pcie_parse_and_add_res() argument
669 struct device *dev = port->dev; in xilinx_pcie_parse_and_add_res()
719 pci_add_resource_offset(&port->resources, mem, offset); in xilinx_pcie_parse_and_add_res()
723 if (of_pci_parse_bus_range(node, &port->bus_range)) { in xilinx_pcie_parse_and_add_res()
724 u32 val = pcie_read(port, XILINX_PCIE_REG_BIR); in xilinx_pcie_parse_and_add_res()
730 port->bus_range = (struct resource) { in xilinx_pcie_parse_and_add_res()
739 pci_add_resource(&port->resources, &port->bus_range); in xilinx_pcie_parse_and_add_res()
745 resource_list_for_each_entry(win, &port->resources) in xilinx_pcie_parse_and_add_res()
747 pci_free_resource_list(&port->resources); in xilinx_pcie_parse_and_add_res()
758 static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port) in xilinx_pcie_parse_dt() argument
760 struct device *dev = port->dev; in xilinx_pcie_parse_dt()
778 port->reg_base = devm_ioremap_resource(dev, &regs); in xilinx_pcie_parse_dt()
779 if (IS_ERR(port->reg_base)) in xilinx_pcie_parse_dt()
780 return PTR_ERR(port->reg_base); in xilinx_pcie_parse_dt()
782 port->irq = irq_of_parse_and_map(node, 0); in xilinx_pcie_parse_dt()
783 err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler, in xilinx_pcie_parse_dt()
785 "xilinx-pcie", port); in xilinx_pcie_parse_dt()
787 dev_err(dev, "unable to request irq %d\n", port->irq); in xilinx_pcie_parse_dt()
802 struct xilinx_pcie_port *port; in xilinx_pcie_probe() local
810 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); in xilinx_pcie_probe()
811 if (!port) in xilinx_pcie_probe()
814 port->dev = dev; in xilinx_pcie_probe()
816 err = xilinx_pcie_parse_dt(port); in xilinx_pcie_probe()
822 xilinx_pcie_init_port(port); in xilinx_pcie_probe()
824 err = xilinx_pcie_init_irq_domain(port); in xilinx_pcie_probe()
834 INIT_LIST_HEAD(&port->resources); in xilinx_pcie_probe()
835 err = xilinx_pcie_parse_and_add_res(port); in xilinx_pcie_probe()
841 platform_set_drvdata(pdev, port); in xilinx_pcie_probe()
847 .private_data = (void **)&port, in xilinx_pcie_probe()
855 xilinx_pcie_msi_chip.dev = port->dev; in xilinx_pcie_probe()
870 struct xilinx_pcie_port *port = platform_get_drvdata(pdev); in xilinx_pcie_remove() local
872 xilinx_pcie_free_irq_domain(port); in xilinx_pcie_remove()