Lines Matching full:rockchip
3 * PCIe EP controller driver for Rockchip SoCs
5 * Copyright (C) 2021 Rockchip Electronics Co., Ltd.
25 #include "../rockchip-pcie-dma.h"
91 #define PCIe_CLIENT_MSI_OBJ_IRQ 0 /* rockchip ep object special irq */
149 .compatible = "rockchip,rk3568-pcie-std-ep",
152 .compatible = "rockchip,rk3588-pcie-std-ep",
159 static void rockchip_pcie_devmode_update(struct rockchip_pcie *rockchip, int mode, int submode) in rockchip_pcie_devmode_update() argument
161 rockchip->obj_info->devmode.mode = mode; in rockchip_pcie_devmode_update()
162 rockchip->obj_info->devmode.submode = submode; in rockchip_pcie_devmode_update()
165 static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip, u32 reg) in rockchip_pcie_readl_apb() argument
167 return readl(rockchip->apb_base + reg); in rockchip_pcie_readl_apb()
170 static void rockchip_pcie_writel_apb(struct rockchip_pcie *rockchip, u32 val, u32 reg) in rockchip_pcie_writel_apb() argument
172 writel(val, rockchip->apb_base + reg); in rockchip_pcie_writel_apb()
202 struct rockchip_pcie *rockchip) in rockchip_pcie_resource_get() argument
221 rockchip->pci.dbi_base = devm_ioremap_resource(dev, dbi_base); in rockchip_pcie_resource_get()
222 if (IS_ERR(rockchip->pci.dbi_base)) in rockchip_pcie_resource_get()
223 return PTR_ERR(rockchip->pci.dbi_base); in rockchip_pcie_resource_get()
224 rockchip->pci.atu_base = rockchip->pci.dbi_base + DEFAULT_DBI_ATU_OFFSET; in rockchip_pcie_resource_get()
225 rockchip->dbi_base_physical = dbi_base->start; in rockchip_pcie_resource_get()
227 rockchip->apb_base = devm_platform_ioremap_resource_byname(pdev, "pcie-apb"); in rockchip_pcie_resource_get()
228 if (!rockchip->apb_base) { in rockchip_pcie_resource_get()
233 rockchip->rst_gpio = devm_gpiod_get_optional(dev, "reset", in rockchip_pcie_resource_get()
235 if (IS_ERR(rockchip->rst_gpio)) in rockchip_pcie_resource_get()
236 return PTR_ERR(rockchip->rst_gpio); in rockchip_pcie_resource_get()
238 ret = device_property_read_u32(dev, "num-ib-windows", &rockchip->num_ib_windows); in rockchip_pcie_resource_get()
244 if (rockchip->num_ib_windows > MAX_IATU_IN) { in rockchip_pcie_resource_get()
249 ret = device_property_read_u32(dev, "num-ob-windows", &rockchip->num_ob_windows); in rockchip_pcie_resource_get()
255 if (rockchip->num_ob_windows > MAX_IATU_OUT) { in rockchip_pcie_resource_get()
260 rockchip->ib_window_map = devm_kcalloc(dev, in rockchip_pcie_resource_get()
261 BITS_TO_LONGS(rockchip->num_ib_windows), in rockchip_pcie_resource_get()
263 if (!rockchip->ib_window_map) in rockchip_pcie_resource_get()
266 rockchip->ob_window_map = devm_kcalloc(dev, in rockchip_pcie_resource_get()
267 BITS_TO_LONGS(rockchip->num_ob_windows), in rockchip_pcie_resource_get()
269 if (!rockchip->ob_window_map) in rockchip_pcie_resource_get()
272 addr = devm_kcalloc(dev, rockchip->num_ob_windows, sizeof(phys_addr_t), in rockchip_pcie_resource_get()
277 rockchip->outbound_addr = addr; in rockchip_pcie_resource_get()
297 rockchip->ib_target_address[i] = reg.start; in rockchip_pcie_resource_get()
298 rockchip->ib_target_size[i] = resource_size(®); in rockchip_pcie_resource_get()
299 rockchip->ib_target_base[i] = rockchip_pcie_map_kernel(reg.start, in rockchip_pcie_resource_get()
301 dev_info(dev, "%s: assigned [0x%llx-%llx]\n", name, rockchip->ib_target_address[i], in rockchip_pcie_resource_get()
302 rockchip->ib_target_address[i] + rockchip->ib_target_size[i] - 1); in rockchip_pcie_resource_get()
305 if (rockchip->ib_target_size[0]) { in rockchip_pcie_resource_get()
306 rockchip->obj_info = (struct pcie_ep_obj_info *)rockchip->ib_target_base[0]; in rockchip_pcie_resource_get()
307 memset_io(rockchip->obj_info, 0, sizeof(struct pcie_ep_obj_info)); in rockchip_pcie_resource_get()
308 rockchip->obj_info->magic = PCIE_EP_OBJ_INFO_MAGIC; in rockchip_pcie_resource_get()
309 rockchip->obj_info->version = PCIE_EP_OBJ_INFO_DRV_VERSION; in rockchip_pcie_resource_get()
310 rockchip_pcie_devmode_update(rockchip, RKEP_MODE_KERNEL, RKEP_SMODE_INIT); in rockchip_pcie_resource_get()
319 static void rockchip_pcie_enable_ltssm(struct rockchip_pcie *rockchip) in rockchip_pcie_enable_ltssm() argument
322 rockchip_pcie_writel_apb(rockchip, 0xf00000, 0x0); in rockchip_pcie_enable_ltssm()
323 rockchip_pcie_writel_apb(rockchip, PCIE_CLIENT_ENABLE_LTSSM, in rockchip_pcie_enable_ltssm()
329 struct rockchip_pcie *rockchip = to_rockchip_pcie(pci); in rockchip_pcie_link_up() local
330 u32 val = rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_LTSSM_STATUS); in rockchip_pcie_link_up()
340 struct rockchip_pcie *rockchip = to_rockchip_pcie(pci); in rockchip_pcie_start_link() local
343 gpiod_set_value_cansleep(rockchip->rst_gpio, 0); in rockchip_pcie_start_link()
345 gpiod_set_value_cansleep(rockchip->rst_gpio, 1); in rockchip_pcie_start_link()
347 rockchip_pcie_enable_ltssm(rockchip); in rockchip_pcie_start_link()
352 static int rockchip_pcie_phy_init(struct rockchip_pcie *rockchip) in rockchip_pcie_phy_init() argument
355 struct device *dev = rockchip->pci.dev; in rockchip_pcie_phy_init()
357 rockchip->phy = devm_phy_get(dev, "pcie-phy"); in rockchip_pcie_phy_init()
358 if (IS_ERR(rockchip->phy)) { in rockchip_pcie_phy_init()
360 return PTR_ERR(rockchip->phy); in rockchip_pcie_phy_init()
363 ret = phy_init(rockchip->phy); in rockchip_pcie_phy_init()
367 phy_power_on(rockchip->phy); in rockchip_pcie_phy_init()
372 static void rockchip_pcie_phy_deinit(struct rockchip_pcie *rockchip) in rockchip_pcie_phy_deinit() argument
374 phy_exit(rockchip->phy); in rockchip_pcie_phy_deinit()
375 phy_power_off(rockchip->phy); in rockchip_pcie_phy_deinit()
378 static int rockchip_pcie_reset_control_release(struct rockchip_pcie *rockchip) in rockchip_pcie_reset_control_release() argument
380 struct device *dev = rockchip->pci.dev; in rockchip_pcie_reset_control_release()
383 rockchip->rst = devm_reset_control_array_get_exclusive(dev); in rockchip_pcie_reset_control_release()
384 if (IS_ERR(rockchip->rst)) { in rockchip_pcie_reset_control_release()
386 return PTR_ERR(rockchip->rst); in rockchip_pcie_reset_control_release()
389 ret = reset_control_deassert(rockchip->rst); in rockchip_pcie_reset_control_release()
394 static int rockchip_pcie_clk_init(struct rockchip_pcie *rockchip) in rockchip_pcie_clk_init() argument
396 struct device *dev = rockchip->pci.dev; in rockchip_pcie_clk_init()
399 ret = devm_clk_bulk_get_all(dev, &rockchip->clks); in rockchip_pcie_clk_init()
403 rockchip->clk_cnt = ret; in rockchip_pcie_clk_init()
405 ret = clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); in rockchip_pcie_clk_init()
412 static int rockchip_pci_find_resbar_capability(struct rockchip_pcie *rockchip) in rockchip_pci_find_resbar_capability() argument
423 header = dw_pcie_readl_dbi(&rockchip->pci, pos); in rockchip_pci_find_resbar_capability()
440 header = dw_pcie_readl_dbi(&rockchip->pci, pos); in rockchip_pci_find_resbar_capability()
448 static int rockchip_pcie_ep_set_bar_flag(struct rockchip_pcie *rockchip, enum pci_barno barno, in rockchip_pcie_ep_set_bar_flag() argument
458 dw_pcie_writel_dbi(&rockchip->pci, reg + PCIE_TYPE0_HDR_DBI2_OFFSET + 4, 0); in rockchip_pcie_ep_set_bar_flag()
460 dw_pcie_writel_dbi(&rockchip->pci, reg, flags); in rockchip_pcie_ep_set_bar_flag()
462 dw_pcie_writel_dbi(&rockchip->pci, reg + 4, 0); in rockchip_pcie_ep_set_bar_flag()
467 static void rockchip_pcie_resize_bar(struct rockchip_pcie *rockchip) in rockchip_pcie_resize_bar() argument
469 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_resize_bar()
527 resbar_base = rockchip_pci_find_resbar_capability(rockchip); in rockchip_pcie_resize_bar()
533 rockchip_pcie_ep_set_bar_flag(rockchip, bar, PCI_BASE_ADDRESS_MEM_TYPE_32); in rockchip_pcie_resize_bar()
538 rockchip_pcie_ep_set_bar_flag(rockchip, bar, in rockchip_pcie_resize_bar()
544 rockchip_pcie_ep_set_bar_flag(rockchip, bar, PCI_BASE_ADDRESS_MEM_TYPE_32); in rockchip_pcie_resize_bar()
553 static void rockchip_pcie_init_id(struct rockchip_pcie *rockchip) in rockchip_pcie_init_id() argument
555 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_init_id()
561 static int rockchip_pcie_ep_set_bar(struct rockchip_pcie *rockchip, enum pci_barno bar, in rockchip_pcie_ep_set_bar() argument
566 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_ep_set_bar()
569 free_win = find_first_zero_bit(rockchip->ib_window_map, in rockchip_pcie_ep_set_bar()
570 rockchip->num_ib_windows); in rockchip_pcie_ep_set_bar()
571 if (free_win >= rockchip->num_ib_windows) { in rockchip_pcie_ep_set_bar()
584 rockchip->bar_to_atu[bar] = free_win; in rockchip_pcie_ep_set_bar()
585 set_bit(free_win, rockchip->ib_window_map); in rockchip_pcie_ep_set_bar()
590 static void rockchip_pcie_fast_link_setup(struct rockchip_pcie *rockchip) in rockchip_pcie_fast_link_setup() argument
595 val = rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_HOT_RESET_CTRL); in rockchip_pcie_fast_link_setup()
598 rockchip_pcie_writel_apb(rockchip, val, PCIE_CLIENT_HOT_RESET_CTRL); in rockchip_pcie_fast_link_setup()
612 static void rockchip_pcie_local_elbi_enable(struct rockchip_pcie *rockchip) in rockchip_pcie_local_elbi_enable() argument
616 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_local_elbi_enable()
625 static void rockchip_pcie_elbi_clear(struct rockchip_pcie *rockchip) in rockchip_pcie_elbi_clear() argument
629 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_elbi_clear()
640 static void rockchip_pcie_raise_msi_irq(struct rockchip_pcie *rockchip, u8 interrupt_num) in rockchip_pcie_raise_msi_irq() argument
642 rockchip_pcie_writel_apb(rockchip, BIT(interrupt_num), PCIE_CLIENT_MSI_GEN_CON); in rockchip_pcie_raise_msi_irq()
647 struct rockchip_pcie *rockchip = arg; in rockchip_pcie_sys_irq_handler() local
648 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_sys_irq_handler()
660 rockchip->obj_info->irq_type_ep = OBJ_IRQ_ELBI; in rockchip_pcie_sys_irq_handler()
661 rockchip_pcie_elbi_clear(rockchip); in rockchip_pcie_sys_irq_handler()
676 if (rockchip->dma_obj && rockchip->dma_obj->cb) in rockchip_pcie_sys_irq_handler()
677 rockchip->dma_obj->cb(rockchip->dma_obj, chn, DMA_TO_BUS); in rockchip_pcie_sys_irq_handler()
693 if (rockchip->dma_obj && rockchip->dma_obj->cb) in rockchip_pcie_sys_irq_handler()
694 rockchip->dma_obj->cb(rockchip->dma_obj, chn, DMA_FROM_BUS); in rockchip_pcie_sys_irq_handler()
706 rockchip->obj_info->irq_type_rc = OBJ_IRQ_DMA; in rockchip_pcie_sys_irq_handler()
707 rockchip->obj_info->dma_status_rc.wr |= wr_status.asdword; in rockchip_pcie_sys_irq_handler()
708 rockchip->obj_info->dma_status_rc.rd |= rd_status.asdword; in rockchip_pcie_sys_irq_handler()
709 rockchip_pcie_raise_msi_irq(rockchip, PCIe_CLIENT_MSI_OBJ_IRQ); in rockchip_pcie_sys_irq_handler()
711 rockchip->obj_info->irq_type_ep = OBJ_IRQ_DMA; in rockchip_pcie_sys_irq_handler()
712 rockchip->obj_info->dma_status_ep.wr |= wr_status.asdword; in rockchip_pcie_sys_irq_handler()
713 rockchip->obj_info->dma_status_ep.rd |= rd_status.asdword; in rockchip_pcie_sys_irq_handler()
719 dev_dbg(rockchip->pci.dev, "SIGIO\n"); in rockchip_pcie_sys_irq_handler()
720 kill_fasync(&rockchip->async, SIGIO, POLL_IN); in rockchip_pcie_sys_irq_handler()
723 reg = rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_INTR_STATUS_MISC); in rockchip_pcie_sys_irq_handler()
725 queue_work(rockchip->hot_rst_wq, &rockchip->hot_rst_work); in rockchip_pcie_sys_irq_handler()
727 rockchip_pcie_writel_apb(rockchip, reg, PCIE_CLIENT_INTR_STATUS_MISC); in rockchip_pcie_sys_irq_handler()
732 static int rockchip_pcie_request_sys_irq(struct rockchip_pcie *rockchip, in rockchip_pcie_request_sys_irq() argument
737 struct device *dev = rockchip->pci.dev; in rockchip_pcie_request_sys_irq()
746 IRQF_SHARED, "pcie-sys", rockchip); in rockchip_pcie_request_sys_irq()
755 static bool rockchip_pcie_udma_enabled(struct rockchip_pcie *rockchip) in rockchip_pcie_udma_enabled() argument
757 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_udma_enabled()
762 static int rockchip_pcie_init_dma_trx(struct rockchip_pcie *rockchip) in rockchip_pcie_init_dma_trx() argument
764 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_init_dma_trx()
766 if (!rockchip_pcie_udma_enabled(rockchip)) in rockchip_pcie_init_dma_trx()
769 rockchip->dma_obj = pcie_dw_dmatest_register(pci->dev, true); in rockchip_pcie_init_dma_trx()
770 if (IS_ERR(rockchip->dma_obj)) { in rockchip_pcie_init_dma_trx()
771 dev_err(rockchip->pci.dev, "failed to prepare dmatest\n"); in rockchip_pcie_init_dma_trx()
776 rockchip_pcie_writel_apb(rockchip, 0xc000000, PCIE_CLIENT_INTR_MASK); in rockchip_pcie_init_dma_trx()
788 struct rockchip_pcie *rockchip = dev_get_drvdata(obj->dev); in rockchip_pcie_start_dma_rd() local
789 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_start_dma_rd()
813 struct rockchip_pcie *rockchip = dev_get_drvdata(obj->dev); in rockchip_pcie_start_dma_wr() local
814 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_start_dma_wr()
877 struct rockchip_pcie *rockchip = container_of(work, struct rockchip_pcie, hot_rst_work); in rockchip_pcie_hot_rst_work() local
881 if (rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_HOT_RESET_CTRL) & PCIE_LTSSM_APP_DLY2_EN) { in rockchip_pcie_hot_rst_work()
882 ret = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_LTSSM_STATUS, in rockchip_pcie_hot_rst_work()
885 dev_err(rockchip->pci.dev, "wait for detect quiet failed!\n"); in rockchip_pcie_hot_rst_work()
887 …rockchip_pcie_writel_apb(rockchip, (PCIE_LTSSM_APP_DLY2_DONE) | ((PCIE_LTSSM_APP_DLY2_DONE) << 16), in rockchip_pcie_hot_rst_work()
894 struct rockchip_pcie *rockchip = dev_get_drvdata(obj->dev); in rockchip_pcie_get_dma_status() local
895 struct dw_pcie *pci = &rockchip->pci; in rockchip_pcie_get_dma_status()
949 struct rockchip_pcie *rockchip = (struct rockchip_pcie *)file->private_data; in pcie_ep_fasync() local
951 return fasync_helper(fd, file, mode, &rockchip->async); in pcie_ep_fasync()
972 struct rockchip_pcie *rockchip = (struct rockchip_pcie *)file->private_data; in pcie_ep_ioctl() local
982 msg.elbi_app_user[i - 4] = dw_pcie_readl_dbi(&rockchip->pci, in pcie_ep_ioctl()
985 msg.elbi_app_user[i - 5] = dw_pcie_readl_dbi(&rockchip->pci, in pcie_ep_ioctl()
990 dev_err(rockchip->pci.dev, "failed to get elbi data\n"); in pcie_ep_ioctl()
997 dev_err(rockchip->pci.dev, "failed to get copy from\n"); in pcie_ep_ioctl()
1000 dma_sync_single_for_cpu(rockchip->pci.dev, cfg.addr, cfg.size, DMA_FROM_DEVICE); in pcie_ep_ioctl()
1005 dev_err(rockchip->pci.dev, "failed to get copy from\n"); in pcie_ep_ioctl()
1008 dma_sync_single_for_device(rockchip->pci.dev, cfg.addr, cfg.size, DMA_TO_DEVICE); in pcie_ep_ioctl()
1011 dw_pcie_writel_dbi(&rockchip->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_MASK, in pcie_ep_ioctl()
1013 dw_pcie_writel_dbi(&rockchip->pci, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_MASK, in pcie_ep_ioctl()
1017 rockchip->obj_info->irq_type_rc = OBJ_IRQ_USER; in pcie_ep_ioctl()
1018 rockchip_pcie_raise_msi_irq(rockchip, PCIe_CLIENT_MSI_OBJ_IRQ); in pcie_ep_ioctl()
1021 msg.bar0_phys_addr = rockchip->ib_target_address[0]; in pcie_ep_ioctl()
1025 dev_err(rockchip->pci.dev, "failed to get elbi data\n"); in pcie_ep_ioctl()
1032 dev_err(rockchip->pci.dev, "failed to get copy from\n"); in pcie_ep_ioctl()
1037 dev_err(rockchip->pci.dev, "mmap index %d is out of number\n", mmap_res); in pcie_ep_ioctl()
1041 rockchip->cur_mmap_res = mmap_res; in pcie_ep_ioctl()
1051 struct rockchip_pcie *rockchip = (struct rockchip_pcie *)file->private_data; in pcie_ep_mmap() local
1056 switch (rockchip->cur_mmap_res) { in pcie_ep_mmap()
1059 dev_warn(rockchip->pci.dev, "dbi mmap size is out of limitation\n"); in pcie_ep_mmap()
1062 addr = rockchip->dbi_base_physical; in pcie_ep_mmap()
1065 if (size > rockchip->ib_target_size[0]) { in pcie_ep_mmap()
1066 dev_warn(rockchip->pci.dev, "bar0 mmap size is out of limitation\n"); in pcie_ep_mmap()
1069 addr = rockchip->ib_target_address[0]; in pcie_ep_mmap()
1072 if (size > rockchip->ib_target_size[2]) { in pcie_ep_mmap()
1073 dev_warn(rockchip->pci.dev, "bar2 mmap size is out of limitation\n"); in pcie_ep_mmap()
1076 addr = rockchip->ib_target_address[2]; in pcie_ep_mmap()
1079 dev_err(rockchip->pci.dev, "cur mmap_res %d is unsurreport\n", rockchip->cur_mmap_res); in pcie_ep_mmap()
1086 if (rockchip->cur_mmap_res == PCIE_EP_MMAP_RESOURCE_BAR2) in pcie_ep_mmap()
1109 static int rockchip_pcie_add_misc(struct rockchip_pcie *rockchip) in rockchip_pcie_add_misc() argument
1114 pcie_dev = devm_kzalloc(rockchip->pci.dev, sizeof(struct rockchip_pcie_misc_dev), in rockchip_pcie_add_misc()
1122 pcie_dev->dev.parent = rockchip->pci.dev; in rockchip_pcie_add_misc()
1126 dev_err(rockchip->pci.dev, "pcie: failed to register misc device.\n"); in rockchip_pcie_add_misc()
1130 pcie_dev->pcie = rockchip; in rockchip_pcie_add_misc()
1132 dev_info(rockchip->pci.dev, "register misc device pcie_ep\n"); in rockchip_pcie_add_misc()
1140 struct rockchip_pcie *rockchip; in rockchip_pcie_ep_probe() local
1145 rockchip = devm_kzalloc(dev, sizeof(*rockchip), GFP_KERNEL); in rockchip_pcie_ep_probe()
1146 if (!rockchip) in rockchip_pcie_ep_probe()
1149 platform_set_drvdata(pdev, rockchip); in rockchip_pcie_ep_probe()
1151 rockchip->pci.dev = dev; in rockchip_pcie_ep_probe()
1152 rockchip->pci.ops = &dw_pcie_ops; in rockchip_pcie_ep_probe()
1154 ret = rockchip_pcie_resource_get(pdev, rockchip); in rockchip_pcie_ep_probe()
1159 rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3"); in rockchip_pcie_ep_probe()
1160 if (IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_ep_probe()
1161 if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV) in rockchip_pcie_ep_probe()
1162 return PTR_ERR(rockchip->vpcie3v3); in rockchip_pcie_ep_probe()
1166 if (!IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_ep_probe()
1167 ret = regulator_enable(rockchip->vpcie3v3); in rockchip_pcie_ep_probe()
1174 ret = rockchip_pcie_clk_init(rockchip); in rockchip_pcie_ep_probe()
1178 if (dw_pcie_link_up(&rockchip->pci)) { in rockchip_pcie_ep_probe()
1185 ret = rockchip_pcie_phy_init(rockchip); in rockchip_pcie_ep_probe()
1189 ret = rockchip_pcie_reset_control_release(rockchip); in rockchip_pcie_ep_probe()
1193 dw_pcie_setup(&rockchip->pci); in rockchip_pcie_ep_probe()
1195 dw_pcie_dbi_ro_wr_en(&rockchip->pci); in rockchip_pcie_ep_probe()
1196 rockchip_pcie_resize_bar(rockchip); in rockchip_pcie_ep_probe()
1197 rockchip_pcie_init_id(rockchip); in rockchip_pcie_ep_probe()
1198 dw_pcie_dbi_ro_wr_dis(&rockchip->pci); in rockchip_pcie_ep_probe()
1200 rockchip_pcie_fast_link_setup(rockchip); in rockchip_pcie_ep_probe()
1202 rockchip_pcie_start_link(&rockchip->pci); in rockchip_pcie_ep_probe()
1203 rockchip_pcie_devmode_update(rockchip, RKEP_MODE_KERNEL, RKEP_SMODE_LNKRDY); in rockchip_pcie_ep_probe()
1205 rockchip->hot_rst_wq = create_singlethread_workqueue("rkep_hot_rst_wq"); in rockchip_pcie_ep_probe()
1206 if (!rockchip->hot_rst_wq) { in rockchip_pcie_ep_probe()
1211 INIT_WORK(&rockchip->hot_rst_work, rockchip_pcie_hot_rst_work); in rockchip_pcie_ep_probe()
1213 reg = rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_INTR_STATUS_MISC); in rockchip_pcie_ep_probe()
1215 (rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_HOT_RESET_CTRL) & PCIE_LTSSM_APP_DLY2_EN)) { in rockchip_pcie_ep_probe()
1216 rockchip_pcie_writel_apb(rockchip, PCIE_LTSSM_APP_DLY2_DONE | (PCIE_LTSSM_APP_DLY2_DONE << 16), in rockchip_pcie_ep_probe()
1220 rockchip_pcie_writel_apb(rockchip, reg, PCIE_CLIENT_INTR_STATUS_MISC); in rockchip_pcie_ep_probe()
1223 rockchip_pcie_writel_apb(rockchip, 0x40000, PCIE_CLIENT_INTR_MASK); in rockchip_pcie_ep_probe()
1226 if (dw_pcie_link_up(&rockchip->pci)) { in rockchip_pcie_ep_probe()
1236 rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_LTSSM_STATUS)); in rockchip_pcie_ep_probe()
1241 rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_LTSSM_STATUS)); in rockchip_pcie_ep_probe()
1251 rockchip_pcie_devmode_update(rockchip, RKEP_MODE_KERNEL, RKEP_SMODE_LNKUP); in rockchip_pcie_ep_probe()
1252 rockchip->pci.iatu_unroll_enabled = rockchip_pcie_iatu_unroll_enabled(&rockchip->pci); in rockchip_pcie_ep_probe()
1254 if (rockchip->ib_target_size[i]) in rockchip_pcie_ep_probe()
1255 rockchip_pcie_ep_set_bar(rockchip, i, rockchip->ib_target_address[i]); in rockchip_pcie_ep_probe()
1257 ret = rockchip_pcie_init_dma_trx(rockchip); in rockchip_pcie_ep_probe()
1263 if (rockchip->dma_obj) { in rockchip_pcie_ep_probe()
1264 rockchip->dma_obj->start_dma_func = rockchip_pcie_start_dma_dwc; in rockchip_pcie_ep_probe()
1265 rockchip->dma_obj->config_dma_func = rockchip_pcie_config_dma_dwc; in rockchip_pcie_ep_probe()
1266 rockchip->dma_obj->get_dma_status = rockchip_pcie_get_dma_status; in rockchip_pcie_ep_probe()
1270 rockchip_pcie_writel_apb(rockchip, 0x80000000, PCIE_CLIENT_INTR_MASK); in rockchip_pcie_ep_probe()
1272 rockchip_pcie_local_elbi_enable(rockchip); in rockchip_pcie_ep_probe()
1274 ret = rockchip_pcie_request_sys_irq(rockchip, pdev); in rockchip_pcie_ep_probe()
1278 rockchip_pcie_add_misc(rockchip); in rockchip_pcie_ep_probe()
1283 rockchip_pcie_phy_deinit(rockchip); in rockchip_pcie_ep_probe()
1285 clk_bulk_disable_unprepare(rockchip->clk_cnt, rockchip->clks); in rockchip_pcie_ep_probe()
1287 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_ep_probe()
1288 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_ep_probe()
1305 MODULE_DESCRIPTION("RockChip PCIe Controller EP driver");