Lines Matching refs:pcie_rkep
88 struct pcie_rkep { struct
109 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_fasync() argument
111 return fasync_helper(fd, file, mode, &pcie_rkep->async); in pcie_rkep_fasync()
117 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_open() local
122 if (pcie_rkep->in_used) in pcie_rkep_open()
125 pcie_rkep->in_used = true; in pcie_rkep_open()
135 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_release() local
138 pcie_rkep->in_used = false; in pcie_rkep_release()
149 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_write() local
169 iowrite32(bar0_buf[i], pcie_rkep->bar0 + loop * 4); in pcie_rkep_write()
183 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_read() local
198 bar0_buf[i] = ioread32(pcie_rkep->bar0 + loop * 4); in pcie_rkep_read()
217 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_mmap() local
221 dev_warn(&pcie_rkep->pdev->dev, "mmap size is out of limitation\n"); in pcie_rkep_mmap()
225 if (!pcie_rkep->user_pages) { in pcie_rkep_mmap()
226 dev_warn(&pcie_rkep->pdev->dev, "user_pages has not been allocated yet\n"); in pcie_rkep_mmap()
230 addr = page_to_phys(pcie_rkep->user_pages); in pcie_rkep_mmap()
235 dev_err(&pcie_rkep->pdev->dev, "io_remap_pfn_range failed\n"); in pcie_rkep_mmap()
246 struct pcie_rkep *pcie_rkep = container_of(miscdev, struct pcie_rkep, dev); in pcie_rkep_ioctl() local
257 if (!pcie_rkep->user_pages) { in pcie_rkep_ioctl()
258 dev_warn(&pcie_rkep->pdev->dev, "user_pages has not been allocated yet\n"); in pcie_rkep_ioctl()
261 addr = page_to_phys(pcie_rkep->user_pages); in pcie_rkep_ioctl()
268 dev_err(&pcie_rkep->pdev->dev, "failed to get copy from\n"); in pcie_rkep_ioctl()
271 dma_sync_single_for_cpu(&pcie_rkep->pdev->dev, cfg.addr, cfg.size, DMA_FROM_DEVICE); in pcie_rkep_ioctl()
276 dev_err(&pcie_rkep->pdev->dev, "failed to get copy from\n"); in pcie_rkep_ioctl()
279 dma_sync_single_for_device(&pcie_rkep->pdev->dev, cfg.addr, cfg.size, in pcie_rkep_ioctl()
301 static inline void pcie_rkep_writel_dbi(struct pcie_rkep *pcie_rkep, u32 reg, u32 val) in pcie_rkep_writel_dbi() argument
303 writel(val, pcie_rkep->bar4 + reg); in pcie_rkep_writel_dbi()
306 static inline u32 pcie_rkep_readl_dbi(struct pcie_rkep *pcie_rkep, u32 reg) in pcie_rkep_readl_dbi() argument
308 return readl(pcie_rkep->bar4 + reg); in pcie_rkep_readl_dbi()
314 struct pcie_rkep *pcie_rkep = pci_get_drvdata(pdev); in pcie_rkep_start_dma_rd() local
316 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_ENB, in pcie_rkep_start_dma_rd()
318 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_CTRL_LO, in pcie_rkep_start_dma_rd()
320 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_CTRL_HI, in pcie_rkep_start_dma_rd()
322 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_XFERSIZE, in pcie_rkep_start_dma_rd()
324 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_SAR_PTR_LO, in pcie_rkep_start_dma_rd()
326 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_SAR_PTR_HI, in pcie_rkep_start_dma_rd()
328 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_DAR_PTR_LO, in pcie_rkep_start_dma_rd()
330 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_RD_DAR_PTR_HI, in pcie_rkep_start_dma_rd()
332 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_DOORBELL, in pcie_rkep_start_dma_rd()
339 struct pcie_rkep *pcie_rkep = pci_get_drvdata(pdev); in pcie_rkep_start_dma_wr() local
341 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_ENB, in pcie_rkep_start_dma_wr()
343 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_CTRL_LO, in pcie_rkep_start_dma_wr()
345 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_CTRL_HI, in pcie_rkep_start_dma_wr()
347 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_XFERSIZE, in pcie_rkep_start_dma_wr()
349 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_SAR_PTR_LO, in pcie_rkep_start_dma_wr()
351 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_SAR_PTR_HI, in pcie_rkep_start_dma_wr()
353 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_DAR_PTR_LO, in pcie_rkep_start_dma_wr()
355 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_DAR_PTR_HI, in pcie_rkep_start_dma_wr()
357 pcie_rkep_writel_dbi(pcie_rkep, ctr_off + PCIE_DMA_WR_WEILO, in pcie_rkep_start_dma_wr()
359 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_DOORBELL, in pcie_rkep_start_dma_wr()
403 struct pcie_rkep *pcie_rkep = pci_get_drvdata(pdev); in pcie_rkep_get_dma_status() local
409 pcie_rkep_readl_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_STATUS), in pcie_rkep_get_dma_status()
410 pcie_rkep_readl_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_STATUS)); in pcie_rkep_get_dma_status()
414 pcie_rkep_readl_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_STATUS); in pcie_rkep_get_dma_status()
417 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, in pcie_rkep_get_dma_status()
425 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, in pcie_rkep_get_dma_status()
431 pcie_rkep_readl_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_STATUS); in pcie_rkep_get_dma_status()
435 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_CLEAR, in pcie_rkep_get_dma_status()
443 pcie_rkep_writel_dbi(pcie_rkep, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_CLEAR, in pcie_rkep_get_dma_status()
452 static int pcie_rkep_obj_handler(struct pcie_rkep *pcie_rkep, struct pci_dev *pdev) in pcie_rkep_obj_handler() argument
459 kill_fasync(&pcie_rkep->async, SIGIO, POLL_IN); in pcie_rkep_obj_handler()
460 irq_type = pcie_rkep->obj_info->irq_type_rc; in pcie_rkep_obj_handler()
463 wr_status.asdword = pcie_rkep->obj_info->dma_status_rc.wr; in pcie_rkep_obj_handler()
464 rd_status.asdword = pcie_rkep->obj_info->dma_status_rc.rd; in pcie_rkep_obj_handler()
468 if (pcie_rkep->dma_obj && pcie_rkep->dma_obj->cb) { in pcie_rkep_obj_handler()
469 pcie_rkep->dma_obj->cb(pcie_rkep->dma_obj, chn, DMA_TO_BUS); in pcie_rkep_obj_handler()
471 pcie_rkep->obj_info->dma_status_rc.wr &= (~clears.doneclr); in pcie_rkep_obj_handler()
477 if (pcie_rkep->dma_obj && pcie_rkep->dma_obj->cb) { in pcie_rkep_obj_handler()
479 pcie_rkep->obj_info->dma_status_rc.wr &= (~clears.abortclr); in pcie_rkep_obj_handler()
486 if (pcie_rkep->dma_obj && pcie_rkep->dma_obj->cb) { in pcie_rkep_obj_handler()
487 pcie_rkep->dma_obj->cb(pcie_rkep->dma_obj, chn, in pcie_rkep_obj_handler()
490 pcie_rkep->obj_info->dma_status_rc.rd &= (~clears.doneclr); in pcie_rkep_obj_handler()
496 if (pcie_rkep->dma_obj && pcie_rkep->dma_obj->cb) { in pcie_rkep_obj_handler()
498 pcie_rkep->obj_info->dma_status_rc.rd &= (~clears.abortclr); in pcie_rkep_obj_handler()
507 static int __maybe_unused rockchip_pcie_raise_elbi_irq(struct pcie_rkep *pcie_rkep, in rockchip_pcie_raise_elbi_irq() argument
513 dev_err(&pcie_rkep->pdev->dev, "elbi int num out of max count\n"); in rockchip_pcie_raise_elbi_irq()
519 return pci_write_config_dword(pcie_rkep->pdev, PCIE_CFG_ELBI_APP_OFFSET + 4 * index, in rockchip_pcie_raise_elbi_irq()
527 struct pcie_rkep *pcie_rkep = pci_get_drvdata(pdev); in pcie_rkep_pcie_interrupt() local
529 if (!pcie_rkep) in pcie_rkep_pcie_interrupt()
532 if (pcie_rkep->msix_enable) in pcie_rkep_pcie_interrupt()
539 if (irq == pci_irq_vector(pcie_rkep->pdev, PCIe_CLIENT_MSI_IRQ_OBJ)) in pcie_rkep_pcie_interrupt()
540 pcie_rkep_obj_handler(pcie_rkep, pdev); in pcie_rkep_pcie_interrupt()
546 static int __maybe_unused pcie_rkep_request_msi_irq(struct pcie_rkep *pcie_rkep) in pcie_rkep_request_msi_irq() argument
551 nvec = pci_alloc_irq_vectors(pcie_rkep->pdev, 1, RKEP_NUM_MSI_VECTORS, PCI_IRQ_MSI); in pcie_rkep_request_msi_irq()
556 dev_err(&pcie_rkep->pdev->dev, "only allocate %d msi interrupt\n", nvec); in pcie_rkep_request_msi_irq()
559 pcie_rkep->msi_ctx[i].dev = pcie_rkep->pdev; in pcie_rkep_request_msi_irq()
560 pcie_rkep->msi_ctx[i].msg_id = i; in pcie_rkep_request_msi_irq()
561 pcie_rkep->msi_ctx[i].name = in pcie_rkep_request_msi_irq()
562 devm_kzalloc(&pcie_rkep->pdev->dev, RKEP_NUM_MSIX_VECTORS, GFP_KERNEL); in pcie_rkep_request_msi_irq()
563 sprintf(pcie_rkep->msi_ctx[i].name, "%s-%d\n", pcie_rkep->dev.name, i); in pcie_rkep_request_msi_irq()
564 ret = request_irq(pci_irq_vector(pcie_rkep->pdev, i), in pcie_rkep_request_msi_irq()
566 pcie_rkep->msi_ctx[i].name, &pcie_rkep->msi_ctx[i]); in pcie_rkep_request_msi_irq()
573 free_irq(pci_irq_vector(pcie_rkep->pdev, j), &pcie_rkep->msi_ctx[j]); in pcie_rkep_request_msi_irq()
574 pci_disable_msi(pcie_rkep->pdev); in pcie_rkep_request_msi_irq()
575 dev_err(&pcie_rkep->pdev->dev, "fail to allocate msi interrupt\n"); in pcie_rkep_request_msi_irq()
577 pcie_rkep->msi_enable = true; in pcie_rkep_request_msi_irq()
578 dev_err(&pcie_rkep->pdev->dev, "success to request msi irq\n"); in pcie_rkep_request_msi_irq()
584 static int __maybe_unused pcie_rkep_request_msix_irq(struct pcie_rkep *pcie_rkep) in pcie_rkep_request_msix_irq() argument
589 pcie_rkep->msix_entries[i].entry = i; in pcie_rkep_request_msix_irq()
591 ret = pci_enable_msix_exact(pcie_rkep->pdev, pcie_rkep->msix_entries, in pcie_rkep_request_msix_irq()
597 pcie_rkep->msix_ctx[i].dev = pcie_rkep->pdev; in pcie_rkep_request_msix_irq()
598 pcie_rkep->msix_ctx[i].msg_id = i; in pcie_rkep_request_msix_irq()
599 pcie_rkep->msix_ctx[i].name = in pcie_rkep_request_msix_irq()
600 devm_kzalloc(&pcie_rkep->pdev->dev, RKEP_NUM_MSIX_VECTORS, GFP_KERNEL); in pcie_rkep_request_msix_irq()
601 sprintf(pcie_rkep->msix_ctx[i].name, "%s-%d\n", pcie_rkep->dev.name, i); in pcie_rkep_request_msix_irq()
602 ret = request_irq(pcie_rkep->msix_entries[i].vector, in pcie_rkep_request_msix_irq()
603 pcie_rkep_pcie_interrupt, 0, pcie_rkep->msix_ctx[i].name, in pcie_rkep_request_msix_irq()
604 &pcie_rkep->msix_ctx[i]); in pcie_rkep_request_msix_irq()
612 free_irq(pcie_rkep->msix_entries[j].vector, &pcie_rkep->msix_ctx[j]); in pcie_rkep_request_msix_irq()
613 pci_disable_msix(pcie_rkep->pdev); in pcie_rkep_request_msix_irq()
614 dev_err(&pcie_rkep->pdev->dev, "fail to allocate msi-x interrupt\n"); in pcie_rkep_request_msix_irq()
616 pcie_rkep->msix_enable = true; in pcie_rkep_request_msix_irq()
617 dev_err(&pcie_rkep->pdev->dev, "success to request msi-x irq\n"); in pcie_rkep_request_msix_irq()
651 struct pcie_rkep *pcie_rkep = dev_get_drvdata(dev); in rkep_store() local
659 rkep_loadfile(dev, "/data/uboot.img", pcie_rkep->bar2, 0); in rkep_store()
661 rkep_loadfile(dev, "/data/boot.img", pcie_rkep->bar2, 0x400000); in rkep_store()
663 writel(RKEP_CMD_LOADER_RUN, pcie_rkep->bar0 + 0x400); in rkep_store()
674 struct pcie_rkep *pcie_rkep; in pcie_rkep_probe() local
678 pcie_rkep = devm_kzalloc(&pdev->dev, sizeof(*pcie_rkep), GFP_KERNEL); in pcie_rkep_probe()
679 if (!pcie_rkep) in pcie_rkep_probe()
694 pcie_rkep->bar0 = pci_iomap(pdev, 0, 0); in pcie_rkep_probe()
695 if (!pcie_rkep->bar0) { in pcie_rkep_probe()
700 pcie_rkep->obj_info = (struct pcie_ep_obj_info *)pcie_rkep->bar0; in pcie_rkep_probe()
701 dev_dbg(&pdev->dev, "get bar0 address is %p\n", pcie_rkep->bar0); in pcie_rkep_probe()
703 pcie_rkep->bar2 = pci_iomap(pdev, 2, 0); in pcie_rkep_probe()
704 if (!pcie_rkep->bar2) { in pcie_rkep_probe()
709 dev_dbg(&pdev->dev, "get bar2 address is %p\n", pcie_rkep->bar2); in pcie_rkep_probe()
711 pcie_rkep->bar4 = pci_iomap(pdev, 4, 0); in pcie_rkep_probe()
712 if (!pcie_rkep->bar4) { in pcie_rkep_probe()
718 dev_dbg(&pdev->dev, "get bar4 address is %p\n", pcie_rkep->bar4); in pcie_rkep_probe()
726 pcie_rkep->dev.minor = MISC_DYNAMIC_MINOR; in pcie_rkep_probe()
727 pcie_rkep->dev.name = name; in pcie_rkep_probe()
728 pcie_rkep->dev.fops = &pcie_rkep_fops; in pcie_rkep_probe()
729 pcie_rkep->dev.parent = NULL; in pcie_rkep_probe()
731 ret = misc_register(&pcie_rkep->dev); in pcie_rkep_probe()
737 pcie_rkep->pdev = pdev; /* Save pci device struct */ in pcie_rkep_probe()
739 pci_set_drvdata(pdev, pcie_rkep); in pcie_rkep_probe()
741 ret = pcie_rkep_request_msi_irq(pcie_rkep); in pcie_rkep_probe()
745 pcie_rkep->dma_obj = pcie_dw_dmatest_register(&pdev->dev, true); in pcie_rkep_probe()
746 if (IS_ERR(pcie_rkep->dma_obj)) { in pcie_rkep_probe()
747 dev_err(&pcie_rkep->pdev->dev, "failed to prepare dmatest\n"); in pcie_rkep_probe()
752 if (pcie_rkep->dma_obj) { in pcie_rkep_probe()
753 pcie_rkep->dma_obj->start_dma_func = pcie_rkep_start_dma_dwc; in pcie_rkep_probe()
754 pcie_rkep->dma_obj->config_dma_func = pcie_rkep_config_dma_dwc; in pcie_rkep_probe()
755 pcie_rkep->dma_obj->get_dma_status = pcie_rkep_get_dma_status; in pcie_rkep_probe()
759 pcie_rkep->user_pages = in pcie_rkep_probe()
761 if (!pcie_rkep->user_pages) { in pcie_rkep_probe()
762 dev_err(&pcie_rkep->pdev->dev, "failed to allocate contiguous pages\n"); in pcie_rkep_probe()
769 pci_read_config_word(pcie_rkep->pdev, PCI_VENDOR_ID, &val); in pcie_rkep_probe()
771 pci_read_config_word(pcie_rkep->pdev, PCI_DEVICE_ID, &val); in pcie_rkep_probe()
773 dev_info(&pdev->dev, "obj_info magic=%x, ver=%x\n", pcie_rkep->obj_info->magic, in pcie_rkep_probe()
774 pcie_rkep->obj_info->version); in pcie_rkep_probe()
780 if (pcie_rkep->msix_enable) { in pcie_rkep_probe()
782 free_irq(pcie_rkep->msix_entries[i].vector, &pcie_rkep->msix_ctx[i]); in pcie_rkep_probe()
784 } else if (pcie_rkep->msi_enable) { in pcie_rkep_probe()
786 if (pcie_rkep->msi_ctx[i].dev) in pcie_rkep_probe()
787 free_irq(pci_irq_vector(pdev, i), &pcie_rkep->msi_ctx[i]); in pcie_rkep_probe()
790 pci_disable_msi(pcie_rkep->pdev); in pcie_rkep_probe()
793 misc_deregister(&pcie_rkep->dev); in pcie_rkep_probe()
795 if (pcie_rkep->bar0) in pcie_rkep_probe()
796 pci_iounmap(pdev, pcie_rkep->bar0); in pcie_rkep_probe()
797 if (pcie_rkep->bar2) in pcie_rkep_probe()
798 pci_iounmap(pdev, pcie_rkep->bar2); in pcie_rkep_probe()
799 if (pcie_rkep->bar4) in pcie_rkep_probe()
800 pci_iounmap(pdev, pcie_rkep->bar4); in pcie_rkep_probe()
811 struct pcie_rkep *pcie_rkep = pci_get_drvdata(pdev); in pcie_rkep_remove() local
816 free_contig_range(page_to_pfn(pcie_rkep->user_pages), RKEP_USER_MEM_SIZE >> PAGE_SHIFT); in pcie_rkep_remove()
818 pci_iounmap(pdev, pcie_rkep->bar0); in pcie_rkep_remove()
821 misc_deregister(&pcie_rkep->dev); in pcie_rkep_remove()
823 if (pcie_rkep->msix_enable) { in pcie_rkep_remove()
825 free_irq(pcie_rkep->msix_entries[i].vector, &pcie_rkep->msix_ctx[i]); in pcie_rkep_remove()
827 } else if (pcie_rkep->msi_enable) { in pcie_rkep_remove()
829 if (pcie_rkep->msi_ctx[i].dev) in pcie_rkep_remove()
830 free_irq(pci_irq_vector(pdev, i), &pcie_rkep->msi_ctx[i]); in pcie_rkep_remove()
831 pci_disable_msi(pcie_rkep->pdev); in pcie_rkep_remove()
839 MODULE_DEVICE_TABLE(pcie_rkep, pcie_rkep_pcidev_id);