Lines Matching full:rockchip

3  * Rockchip AXI PCIe host controller driver
5 * Copyright (c) 2016 Rockchip, Inc.
40 #include "pcie-rockchip.h"
41 #include "rockchip-pcie-dma.h"
45 struct rockchip_pcie *rockchip = dev_get_drvdata(obj->dev); in rk_pcie_start_dma_rk3399() local
49 rockchip_pcie_write(rockchip, (u32)(tbl->phys_descs & 0xffffffff), in rk_pcie_start_dma_rk3399()
51 rockchip_pcie_write(rockchip, (u32)(tbl->phys_descs >> 32), in rk_pcie_start_dma_rk3399()
53 rockchip_pcie_write(rockchip, BIT(0) | (tbl->dir << 1), in rk_pcie_start_dma_rk3399()
73 static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip) in rockchip_pcie_enable_bw_int() argument
77 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_enable_bw_int()
79 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_enable_bw_int()
82 static void rockchip_pcie_clr_bw_int(struct rockchip_pcie *rockchip) in rockchip_pcie_clr_bw_int() argument
86 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_clr_bw_int()
88 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_clr_bw_int()
91 static void rockchip_pcie_update_txcredit_mui(struct rockchip_pcie *rockchip) in rockchip_pcie_update_txcredit_mui() argument
96 val = rockchip_pcie_read(rockchip, PCIE_CORE_TXCREDIT_CFG1); in rockchip_pcie_update_txcredit_mui()
99 rockchip_pcie_write(rockchip, val, PCIE_CORE_TXCREDIT_CFG1); in rockchip_pcie_update_txcredit_mui()
102 static int rockchip_pcie_valid_device(struct rockchip_pcie *rockchip, in rockchip_pcie_valid_device() argument
116 static u8 rockchip_pcie_lane_map(struct rockchip_pcie *rockchip) in rockchip_pcie_lane_map() argument
121 if (rockchip->legacy_phy) in rockchip_pcie_lane_map()
124 val = rockchip_pcie_read(rockchip, PCIE_CORE_LANE_MAP); in rockchip_pcie_lane_map()
134 static int rockchip_pcie_rd_own_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_rd_own_conf() argument
139 addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + where; in rockchip_pcie_rd_own_conf()
159 static int rockchip_pcie_wr_own_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_wr_own_conf() argument
166 addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + offset; in rockchip_pcie_wr_own_conf()
187 static int rockchip_pcie_rd_other_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_rd_other_conf() argument
193 if (rockchip->in_remove) in rockchip_pcie_rd_other_conf()
205 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_rd_other_conf()
208 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_rd_other_conf()
212 *val = readl(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
214 *val = readw(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
216 *val = readb(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
224 static int rockchip_pcie_wr_other_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_wr_other_conf() argument
230 if (rockchip->in_remove) in rockchip_pcie_wr_other_conf()
239 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_wr_other_conf()
242 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_wr_other_conf()
246 writel(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
248 writew(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
250 writeb(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
260 struct rockchip_pcie *rockchip = bus->sysdata; in rockchip_pcie_rd_conf() local
262 if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) { in rockchip_pcie_rd_conf()
268 return rockchip_pcie_rd_own_conf(rockchip, where, size, val); in rockchip_pcie_rd_conf()
270 return rockchip_pcie_rd_other_conf(rockchip, bus, devfn, where, size, in rockchip_pcie_rd_conf()
277 struct rockchip_pcie *rockchip = bus->sysdata; in rockchip_pcie_wr_conf() local
279 if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) in rockchip_pcie_wr_conf()
283 return rockchip_pcie_wr_own_conf(rockchip, where, size, val); in rockchip_pcie_wr_conf()
285 return rockchip_pcie_wr_other_conf(rockchip, bus, devfn, where, size, in rockchip_pcie_wr_conf()
294 static void rockchip_pcie_set_power_limit(struct rockchip_pcie *rockchip) in rockchip_pcie_set_power_limit() argument
299 if (IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_set_power_limit()
308 curr = regulator_get_current_limit(rockchip->vpcie3v3); in rockchip_pcie_set_power_limit()
317 dev_warn(rockchip->dev, "invalid power supply\n"); in rockchip_pcie_set_power_limit()
324 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCR); in rockchip_pcie_set_power_limit()
327 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCR); in rockchip_pcie_set_power_limit()
332 * @rockchip: PCIe port information
334 static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip) in rockchip_pcie_host_init_port() argument
336 struct device *dev = rockchip->dev; in rockchip_pcie_host_init_port()
341 gpiod_set_value_cansleep(rockchip->ep_gpio, 0); in rockchip_pcie_host_init_port()
343 err = rockchip_pcie_init_port(rockchip); in rockchip_pcie_host_init_port()
348 status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL_PLC1); in rockchip_pcie_host_init_port()
351 rockchip_pcie_write(rockchip, status, PCIE_CORE_CTRL_PLC1); in rockchip_pcie_host_init_port()
353 rockchip_pcie_set_power_limit(rockchip); in rockchip_pcie_host_init_port()
356 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
358 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
361 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
363 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
366 rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_ENABLE, in rockchip_pcie_host_init_port()
369 gpiod_set_value_cansleep(rockchip->ep_gpio, 1); in rockchip_pcie_host_init_port()
371 if (rockchip->wait_ep) in rockchip_pcie_host_init_port()
375 err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_BASIC_STATUS1, in rockchip_pcie_host_init_port()
383 err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_DEBUG_OUT_0, in rockchip_pcie_host_init_port()
391 if (rockchip->link_gen == 2) { in rockchip_pcie_host_init_port()
396 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
398 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
400 err = readl_poll_timeout(rockchip->apb_base + PCIE_CORE_CTRL, in rockchip_pcie_host_init_port()
408 status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL); in rockchip_pcie_host_init_port()
414 rockchip->lanes_map = rockchip_pcie_lane_map(rockchip); in rockchip_pcie_host_init_port()
416 if (!(rockchip->lanes_map & BIT(i))) { in rockchip_pcie_host_init_port()
418 phy_power_off(rockchip->phys[i]); in rockchip_pcie_host_init_port()
423 if (rockchip->dma_trx_enabled) in rockchip_pcie_host_init_port()
424 rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_DISABLE, in rockchip_pcie_host_init_port()
427 rockchip_pcie_write(rockchip, ROCKCHIP_VENDOR_ID, in rockchip_pcie_host_init_port()
429 rockchip_pcie_write(rockchip, in rockchip_pcie_host_init_port()
434 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_THP_CAP); in rockchip_pcie_host_init_port()
436 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_THP_CAP); in rockchip_pcie_host_init_port()
440 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LINK_CAP); in rockchip_pcie_host_init_port()
442 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LINK_CAP); in rockchip_pcie_host_init_port()
445 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCSR); in rockchip_pcie_host_init_port()
448 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCSR); in rockchip_pcie_host_init_port()
453 phy_power_off(rockchip->phys[i]); in rockchip_pcie_host_init_port()
456 phy_exit(rockchip->phys[i]); in rockchip_pcie_host_init_port()
461 rockchip_pcie_handle_dma_interrupt(struct rockchip_pcie *rockchip) in rockchip_pcie_handle_dma_interrupt() argument
464 struct dma_trx_obj *obj = rockchip->dma_obj; in rockchip_pcie_handle_dma_interrupt()
466 dma_status = rockchip_pcie_read(rockchip, in rockchip_pcie_handle_dma_interrupt()
470 rockchip_pcie_write(rockchip, dma_status, in rockchip_pcie_handle_dma_interrupt()
489 struct rockchip_pcie *rockchip = arg; in rockchip_pcie_subsys_irq_handler() local
490 struct device *dev = rockchip->dev; in rockchip_pcie_subsys_irq_handler()
494 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
495 sub_reg = rockchip_pcie_read(rockchip, PCIE_CORE_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
541 rockchip_pcie_write(rockchip, sub_reg, PCIE_CORE_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
544 rockchip_pcie_update_txcredit_mui(rockchip); in rockchip_pcie_subsys_irq_handler()
545 rockchip_pcie_clr_bw_int(rockchip); in rockchip_pcie_subsys_irq_handler()
549 rockchip_pcie_write(rockchip, sub_reg, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
550 rockchip_pcie_write(rockchip, reg, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
551 rockchip_pcie_handle_dma_interrupt(rockchip); in rockchip_pcie_subsys_irq_handler()
554 rockchip_pcie_write(rockchip, reg & PCIE_CLIENT_INT_LOCAL, in rockchip_pcie_subsys_irq_handler()
562 struct rockchip_pcie *rockchip = arg; in rockchip_pcie_client_irq_handler() local
563 struct device *dev = rockchip->dev; in rockchip_pcie_client_irq_handler()
566 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_client_irq_handler()
591 rockchip_pcie_write(rockchip, reg & (PCIE_CLIENT_INT_LEGACY_DONE | in rockchip_pcie_client_irq_handler()
605 struct rockchip_pcie *rockchip = irq_desc_get_handler_data(desc); in rockchip_pcie_legacy_int_handler() local
606 struct device *dev = rockchip->dev; in rockchip_pcie_legacy_int_handler()
613 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_legacy_int_handler()
620 virq = irq_find_mapping(rockchip->irq_domain, hwirq); in rockchip_pcie_legacy_int_handler()
630 static int rockchip_pcie_setup_irq(struct rockchip_pcie *rockchip) in rockchip_pcie_setup_irq() argument
633 struct device *dev = rockchip->dev; in rockchip_pcie_setup_irq()
641 IRQF_SHARED, "pcie-sys", rockchip); in rockchip_pcie_setup_irq()
653 rockchip); in rockchip_pcie_setup_irq()
660 IRQF_SHARED, "pcie-client", rockchip); in rockchip_pcie_setup_irq()
671 * @rockchip: PCIe port information
675 static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) in rockchip_pcie_parse_host_dt() argument
677 struct device *dev = rockchip->dev; in rockchip_pcie_parse_host_dt()
680 err = rockchip_pcie_parse_dt(rockchip); in rockchip_pcie_parse_host_dt()
684 rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v"); in rockchip_pcie_parse_host_dt()
685 if (IS_ERR(rockchip->vpcie12v)) { in rockchip_pcie_parse_host_dt()
686 if (PTR_ERR(rockchip->vpcie12v) != -ENODEV) in rockchip_pcie_parse_host_dt()
687 return PTR_ERR(rockchip->vpcie12v); in rockchip_pcie_parse_host_dt()
691 rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3"); in rockchip_pcie_parse_host_dt()
692 if (IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_parse_host_dt()
693 if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV) in rockchip_pcie_parse_host_dt()
694 return PTR_ERR(rockchip->vpcie3v3); in rockchip_pcie_parse_host_dt()
698 rockchip->vpcie1v8 = devm_regulator_get(dev, "vpcie1v8"); in rockchip_pcie_parse_host_dt()
699 if (IS_ERR(rockchip->vpcie1v8)) in rockchip_pcie_parse_host_dt()
700 return PTR_ERR(rockchip->vpcie1v8); in rockchip_pcie_parse_host_dt()
702 rockchip->vpcie0v9 = devm_regulator_get(dev, "vpcie0v9"); in rockchip_pcie_parse_host_dt()
703 if (IS_ERR(rockchip->vpcie0v9)) in rockchip_pcie_parse_host_dt()
704 return PTR_ERR(rockchip->vpcie0v9); in rockchip_pcie_parse_host_dt()
709 static int rockchip_pcie_set_vpcie(struct rockchip_pcie *rockchip) in rockchip_pcie_set_vpcie() argument
711 struct device *dev = rockchip->dev; in rockchip_pcie_set_vpcie()
714 if (!IS_ERR(rockchip->vpcie12v)) { in rockchip_pcie_set_vpcie()
715 err = regulator_enable(rockchip->vpcie12v); in rockchip_pcie_set_vpcie()
722 if (!IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_set_vpcie()
723 err = regulator_enable(rockchip->vpcie3v3); in rockchip_pcie_set_vpcie()
730 err = regulator_enable(rockchip->vpcie1v8); in rockchip_pcie_set_vpcie()
736 err = regulator_enable(rockchip->vpcie0v9); in rockchip_pcie_set_vpcie()
745 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_set_vpcie()
747 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_set_vpcie()
748 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_set_vpcie()
750 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_set_vpcie()
751 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_set_vpcie()
756 static void rockchip_pcie_enable_interrupts(struct rockchip_pcie *rockchip) in rockchip_pcie_enable_interrupts() argument
758 rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) & in rockchip_pcie_enable_interrupts()
760 rockchip_pcie_write(rockchip, (u32)(~PCIE_CORE_INT), in rockchip_pcie_enable_interrupts()
763 rockchip_pcie_enable_bw_int(rockchip); in rockchip_pcie_enable_interrupts()
764 rockchip_pcie_write(rockchip, PCIE_UDMA_INT_ENABLE_MASK, in rockchip_pcie_enable_interrupts()
781 static int rockchip_pcie_init_irq_domain(struct rockchip_pcie *rockchip) in rockchip_pcie_init_irq_domain() argument
783 struct device *dev = rockchip->dev; in rockchip_pcie_init_irq_domain()
791 rockchip->irq_domain = irq_domain_add_linear(intc, PCI_NUM_INTX, in rockchip_pcie_init_irq_domain()
792 &intx_domain_ops, rockchip); in rockchip_pcie_init_irq_domain()
794 if (!rockchip->irq_domain) { in rockchip_pcie_init_irq_domain()
802 static int rockchip_pcie_prog_ob_atu(struct rockchip_pcie *rockchip, in rockchip_pcie_prog_ob_atu() argument
833 rockchip_pcie_write(rockchip, ob_addr_0, in rockchip_pcie_prog_ob_atu()
835 rockchip_pcie_write(rockchip, ob_addr_1, in rockchip_pcie_prog_ob_atu()
837 rockchip_pcie_write(rockchip, ob_desc_0, in rockchip_pcie_prog_ob_atu()
839 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_prog_ob_atu()
845 static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip, in rockchip_pcie_prog_ib_atu() argument
866 rockchip_pcie_write(rockchip, ib_addr_0, PCIE_RP_IB_ADDR0 + aw_offset); in rockchip_pcie_prog_ib_atu()
867 rockchip_pcie_write(rockchip, ib_addr_1, PCIE_RP_IB_ADDR1 + aw_offset); in rockchip_pcie_prog_ib_atu()
872 static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip) in rockchip_pcie_cfg_atu() argument
874 struct device *dev = rockchip->dev; in rockchip_pcie_cfg_atu()
875 struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip); in rockchip_pcie_cfg_atu()
882 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_cfg_atu()
890 rockchip->msg_bus_addr = pci_addr; in rockchip_pcie_cfg_atu()
893 err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1, in rockchip_pcie_cfg_atu()
905 if (rockchip->dma_trx_enabled) { in rockchip_pcie_cfg_atu()
906 rockchip_pcie_prog_ob_atu(rockchip, 1, AXI_WRAPPER_MEM_WRITE, in rockchip_pcie_cfg_atu()
907 32 - 1, rockchip->mem_reserve_start, 0x0); in rockchip_pcie_cfg_atu()
910 err = rockchip_pcie_prog_ib_atu(rockchip, 2, 32 - 1, 0x0, 0); in rockchip_pcie_cfg_atu()
927 err = rockchip_pcie_prog_ob_atu(rockchip, in rockchip_pcie_cfg_atu()
940 rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1 + offset, in rockchip_pcie_cfg_atu()
944 rockchip->msg_bus_addr += ((reg_no + offset) << 20); in rockchip_pcie_cfg_atu()
945 rockchip->msg_region = devm_ioremap(dev, rockchip->msg_bus_addr, SZ_1M); in rockchip_pcie_cfg_atu()
946 if (!rockchip->msg_region) in rockchip_pcie_cfg_atu()
951 static int rockchip_pcie_wait_l2(struct rockchip_pcie *rockchip) in rockchip_pcie_wait_l2() argument
957 if (rockchip->dma_trx_enabled == 1) in rockchip_pcie_wait_l2()
961 writel(0x0, rockchip->msg_region + PCIE_RC_SEND_PME_OFF); in rockchip_pcie_wait_l2()
964 err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_DEBUG_OUT_0, in rockchip_pcie_wait_l2()
968 dev_err(rockchip->dev, "PCIe link enter L2 timeout!\n"); in rockchip_pcie_wait_l2()
977 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_suspend_for_user() local
981 rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) | in rockchip_pcie_suspend_for_user()
983 rockchip_pcie_write(rockchip, (u32)PCIE_CORE_INT, PCIE_CORE_INT_MASK); in rockchip_pcie_suspend_for_user()
985 ret = rockchip_pcie_wait_l2(rockchip); in rockchip_pcie_suspend_for_user()
987 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_suspend_for_user()
992 rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_DISABLE, in rockchip_pcie_suspend_for_user()
995 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_suspend_for_user()
1002 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_resume_for_user() local
1005 err = rockchip_pcie_host_init_port(rockchip); in rockchip_pcie_resume_for_user()
1009 err = rockchip_pcie_cfg_atu(rockchip); in rockchip_pcie_resume_for_user()
1014 rockchip_pcie_update_txcredit_mui(rockchip); in rockchip_pcie_resume_for_user()
1015 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_resume_for_user()
1022 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_suspend_noirq() local
1025 if (!rockchip->dma_trx_enabled) in rockchip_pcie_suspend_noirq()
1028 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_suspend_noirq()
1030 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_suspend_noirq()
1037 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_resume_noirq() local
1040 err = regulator_enable(rockchip->vpcie0v9); in rockchip_pcie_resume_noirq()
1046 err = rockchip_pcie_enable_clocks(rockchip); in rockchip_pcie_resume_noirq()
1050 if (!rockchip->dma_trx_enabled) in rockchip_pcie_resume_noirq()
1058 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_resume_noirq()
1060 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_resume_noirq()
1065 static int rockchip_pcie_really_probe(struct rockchip_pcie *rockchip) in rockchip_pcie_really_probe() argument
1069 err = rockchip_pcie_host_init_port(rockchip); in rockchip_pcie_really_probe()
1073 err = rockchip_pcie_setup_irq(rockchip); in rockchip_pcie_really_probe()
1077 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_really_probe()
1079 err = rockchip_pcie_cfg_atu(rockchip); in rockchip_pcie_really_probe()
1083 rockchip->bridge->sysdata = rockchip; in rockchip_pcie_really_probe()
1084 rockchip->bridge->ops = &rockchip_pcie_ops; in rockchip_pcie_really_probe()
1086 device_init_wakeup(rockchip->dev, true); in rockchip_pcie_really_probe()
1088 return pci_host_probe(rockchip->bridge); in rockchip_pcie_really_probe()
1097 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in pcie_deferred_store() local
1104 rockchip->wait_ep = 1; in pcie_deferred_store()
1105 err = rockchip_pcie_really_probe(rockchip); in pcie_deferred_store()
1119 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in pcie_reset_ep_store() local
1120 struct dma_trx_obj *obj = rockchip->dma_obj; in pcie_reset_ep_store()
1129 rockchip_pcie_suspend_for_user(rockchip->dev); in pcie_reset_ep_store()
1131 rockchip_pcie_resume_for_user(rockchip->dev); in pcie_reset_ep_store()
1153 struct rockchip_pcie *rockchip; in rockchip_pcie_probe() local
1161 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rockchip)); in rockchip_pcie_probe()
1165 rockchip = pci_host_bridge_priv(bridge); in rockchip_pcie_probe()
1167 rockchip->bridge = bridge; in rockchip_pcie_probe()
1169 platform_set_drvdata(pdev, rockchip); in rockchip_pcie_probe()
1170 rockchip->dev = dev; in rockchip_pcie_probe()
1171 rockchip->is_rc = true; in rockchip_pcie_probe()
1173 err = rockchip_pcie_parse_host_dt(rockchip); in rockchip_pcie_probe()
1177 err = rockchip_pcie_enable_clocks(rockchip); in rockchip_pcie_probe()
1181 err = rockchip_pcie_set_vpcie(rockchip); in rockchip_pcie_probe()
1187 err = rockchip_pcie_init_irq_domain(rockchip); in rockchip_pcie_probe()
1191 if (rockchip->deferred) { in rockchip_pcie_probe()
1198 err = rockchip_pcie_really_probe(rockchip); in rockchip_pcie_probe()
1205 if (rockchip->dma_trx_enabled == 0) in rockchip_pcie_probe()
1208 rockchip->dma_obj = rk_pcie_dma_obj_probe(dev); in rockchip_pcie_probe()
1209 if (IS_ERR(rockchip->dma_obj)) { in rockchip_pcie_probe()
1215 if (rockchip->dma_obj) { in rockchip_pcie_probe()
1216 rockchip->dma_obj->start_dma_func = rk_pcie_start_dma_rk3399; in rockchip_pcie_probe()
1217 rockchip->dma_obj->config_dma_func = rk_pcie_config_dma_rk3399; in rockchip_pcie_probe()
1223 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_probe()
1224 if (rockchip->deferred) in rockchip_pcie_probe()
1227 irq_domain_remove(rockchip->irq_domain); in rockchip_pcie_probe()
1229 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_probe()
1230 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_probe()
1231 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_probe()
1232 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_probe()
1233 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_probe()
1234 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_probe()
1236 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_probe()
1243 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_remove() local
1246 struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip); in rockchip_pcie_remove()
1248 status1 = rockchip_pcie_read(rockchip, PCIE_CLIENT_BASIC_STATUS1); in rockchip_pcie_remove()
1249 status2 = rockchip_pcie_read(rockchip, PCIE_CLIENT_DEBUG_OUT_0); in rockchip_pcie_remove()
1252 rockchip->in_remove = 1; in rockchip_pcie_remove()
1256 irq_domain_remove(rockchip->irq_domain); in rockchip_pcie_remove()
1259 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_remove()
1261 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_remove()
1265 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_remove()
1267 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_remove()
1269 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_remove()
1271 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_remove()
1273 if (rockchip->dma_trx_enabled) in rockchip_pcie_remove()
1274 rk_pcie_dma_obj_remove(rockchip->dma_obj); in rockchip_pcie_remove()
1276 if (rockchip->deferred) in rockchip_pcie_remove()
1279 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_remove()
1280 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_remove()
1281 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_remove()
1282 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_remove()
1283 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_remove()
1284 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_remove()
1286 device_init_wakeup(rockchip->dev, false); in rockchip_pcie_remove()
1297 { .compatible = "rockchip,rk3399-pcie", },
1304 .name = "rockchip-pcie",
1313 MODULE_AUTHOR("Rockchip Inc");
1314 MODULE_DESCRIPTION("Rockchip AXI PCIe driver");