Lines Matching full:rockchip

3  * Rockchip AXI PCIe host controller driver
5 * Copyright (c) 2016 Rockchip, Inc.
40 #include "pcie-rockchip.h"
42 static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip) in rockchip_pcie_enable_bw_int() argument
46 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_enable_bw_int()
48 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_enable_bw_int()
51 static void rockchip_pcie_clr_bw_int(struct rockchip_pcie *rockchip) in rockchip_pcie_clr_bw_int() argument
55 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_clr_bw_int()
57 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_clr_bw_int()
60 static void rockchip_pcie_update_txcredit_mui(struct rockchip_pcie *rockchip) in rockchip_pcie_update_txcredit_mui() argument
65 val = rockchip_pcie_read(rockchip, PCIE_CORE_TXCREDIT_CFG1); in rockchip_pcie_update_txcredit_mui()
68 rockchip_pcie_write(rockchip, val, PCIE_CORE_TXCREDIT_CFG1); in rockchip_pcie_update_txcredit_mui()
71 static int rockchip_pcie_valid_device(struct rockchip_pcie *rockchip, in rockchip_pcie_valid_device() argument
85 static u8 rockchip_pcie_lane_map(struct rockchip_pcie *rockchip) in rockchip_pcie_lane_map() argument
90 if (rockchip->legacy_phy) in rockchip_pcie_lane_map()
93 val = rockchip_pcie_read(rockchip, PCIE_CORE_LANE_MAP); in rockchip_pcie_lane_map()
103 static int rockchip_pcie_rd_own_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_rd_own_conf() argument
108 addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + where; in rockchip_pcie_rd_own_conf()
128 static int rockchip_pcie_wr_own_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_wr_own_conf() argument
135 addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + offset; in rockchip_pcie_wr_own_conf()
156 static int rockchip_pcie_rd_other_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_rd_other_conf() argument
171 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_rd_other_conf()
174 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_rd_other_conf()
178 *val = readl(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
180 *val = readw(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
182 *val = readb(rockchip->reg_base + busdev); in rockchip_pcie_rd_other_conf()
190 static int rockchip_pcie_wr_other_conf(struct rockchip_pcie *rockchip, in rockchip_pcie_wr_other_conf() argument
202 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_wr_other_conf()
205 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_wr_other_conf()
209 writel(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
211 writew(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
213 writeb(val, rockchip->reg_base + busdev); in rockchip_pcie_wr_other_conf()
223 struct rockchip_pcie *rockchip = bus->sysdata; in rockchip_pcie_rd_conf() local
225 if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) { in rockchip_pcie_rd_conf()
231 return rockchip_pcie_rd_own_conf(rockchip, where, size, val); in rockchip_pcie_rd_conf()
233 return rockchip_pcie_rd_other_conf(rockchip, bus, devfn, where, size, in rockchip_pcie_rd_conf()
240 struct rockchip_pcie *rockchip = bus->sysdata; in rockchip_pcie_wr_conf() local
242 if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) in rockchip_pcie_wr_conf()
246 return rockchip_pcie_wr_own_conf(rockchip, where, size, val); in rockchip_pcie_wr_conf()
248 return rockchip_pcie_wr_other_conf(rockchip, bus, devfn, where, size, in rockchip_pcie_wr_conf()
257 static void rockchip_pcie_set_power_limit(struct rockchip_pcie *rockchip) in rockchip_pcie_set_power_limit() argument
262 if (IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_set_power_limit()
271 curr = regulator_get_current_limit(rockchip->vpcie3v3); in rockchip_pcie_set_power_limit()
280 dev_warn(rockchip->dev, "invalid power supply\n"); in rockchip_pcie_set_power_limit()
287 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCR); in rockchip_pcie_set_power_limit()
290 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCR); in rockchip_pcie_set_power_limit()
295 * @rockchip: PCIe port information
297 static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip) in rockchip_pcie_host_init_port() argument
299 struct device *dev = rockchip->dev; in rockchip_pcie_host_init_port()
303 gpiod_set_value_cansleep(rockchip->ep_gpio, 0); in rockchip_pcie_host_init_port()
305 err = rockchip_pcie_init_port(rockchip); in rockchip_pcie_host_init_port()
310 status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL_PLC1); in rockchip_pcie_host_init_port()
313 rockchip_pcie_write(rockchip, status, PCIE_CORE_CTRL_PLC1); in rockchip_pcie_host_init_port()
315 rockchip_pcie_set_power_limit(rockchip); in rockchip_pcie_host_init_port()
318 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
320 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
323 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
325 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
328 rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_ENABLE, in rockchip_pcie_host_init_port()
331 gpiod_set_value_cansleep(rockchip->ep_gpio, 1); in rockchip_pcie_host_init_port()
334 err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_BASIC_STATUS1, in rockchip_pcie_host_init_port()
342 if (rockchip->link_gen == 2) { in rockchip_pcie_host_init_port()
347 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
349 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); in rockchip_pcie_host_init_port()
351 err = readl_poll_timeout(rockchip->apb_base + PCIE_CORE_CTRL, in rockchip_pcie_host_init_port()
359 status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL); in rockchip_pcie_host_init_port()
365 rockchip->lanes_map = rockchip_pcie_lane_map(rockchip); in rockchip_pcie_host_init_port()
367 if (!(rockchip->lanes_map & BIT(i))) { in rockchip_pcie_host_init_port()
369 phy_power_off(rockchip->phys[i]); in rockchip_pcie_host_init_port()
373 rockchip_pcie_write(rockchip, ROCKCHIP_VENDOR_ID, in rockchip_pcie_host_init_port()
375 rockchip_pcie_write(rockchip, in rockchip_pcie_host_init_port()
380 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_THP_CAP); in rockchip_pcie_host_init_port()
382 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_THP_CAP); in rockchip_pcie_host_init_port()
386 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LINK_CAP); in rockchip_pcie_host_init_port()
388 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LINK_CAP); in rockchip_pcie_host_init_port()
391 status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCSR); in rockchip_pcie_host_init_port()
394 rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCSR); in rockchip_pcie_host_init_port()
399 phy_power_off(rockchip->phys[i]); in rockchip_pcie_host_init_port()
402 phy_exit(rockchip->phys[i]); in rockchip_pcie_host_init_port()
408 struct rockchip_pcie *rockchip = arg; in rockchip_pcie_subsys_irq_handler() local
409 struct device *dev = rockchip->dev; in rockchip_pcie_subsys_irq_handler()
413 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
416 sub_reg = rockchip_pcie_read(rockchip, PCIE_CORE_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
459 rockchip_pcie_write(rockchip, sub_reg, PCIE_CORE_INT_STATUS); in rockchip_pcie_subsys_irq_handler()
462 rockchip_pcie_update_txcredit_mui(rockchip); in rockchip_pcie_subsys_irq_handler()
463 rockchip_pcie_clr_bw_int(rockchip); in rockchip_pcie_subsys_irq_handler()
466 rockchip_pcie_write(rockchip, reg & PCIE_CLIENT_INT_LOCAL, in rockchip_pcie_subsys_irq_handler()
474 struct rockchip_pcie *rockchip = arg; in rockchip_pcie_client_irq_handler() local
475 struct device *dev = rockchip->dev; in rockchip_pcie_client_irq_handler()
478 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_client_irq_handler()
503 rockchip_pcie_write(rockchip, reg & (PCIE_CLIENT_INT_LEGACY_DONE | in rockchip_pcie_client_irq_handler()
517 struct rockchip_pcie *rockchip = irq_desc_get_handler_data(desc); in rockchip_pcie_legacy_int_handler() local
518 struct device *dev = rockchip->dev; in rockchip_pcie_legacy_int_handler()
525 reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS); in rockchip_pcie_legacy_int_handler()
532 virq = irq_find_mapping(rockchip->irq_domain, hwirq); in rockchip_pcie_legacy_int_handler()
542 static int rockchip_pcie_setup_irq(struct rockchip_pcie *rockchip) in rockchip_pcie_setup_irq() argument
545 struct device *dev = rockchip->dev; in rockchip_pcie_setup_irq()
553 IRQF_SHARED, "pcie-sys", rockchip); in rockchip_pcie_setup_irq()
565 rockchip); in rockchip_pcie_setup_irq()
572 IRQF_SHARED, "pcie-client", rockchip); in rockchip_pcie_setup_irq()
583 * @rockchip: PCIe port information
587 static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) in rockchip_pcie_parse_host_dt() argument
589 struct device *dev = rockchip->dev; in rockchip_pcie_parse_host_dt()
592 err = rockchip_pcie_parse_dt(rockchip); in rockchip_pcie_parse_host_dt()
596 err = rockchip_pcie_setup_irq(rockchip); in rockchip_pcie_parse_host_dt()
600 rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v"); in rockchip_pcie_parse_host_dt()
601 if (IS_ERR(rockchip->vpcie12v)) { in rockchip_pcie_parse_host_dt()
602 if (PTR_ERR(rockchip->vpcie12v) != -ENODEV) in rockchip_pcie_parse_host_dt()
603 return PTR_ERR(rockchip->vpcie12v); in rockchip_pcie_parse_host_dt()
607 rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3"); in rockchip_pcie_parse_host_dt()
608 if (IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_parse_host_dt()
609 if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV) in rockchip_pcie_parse_host_dt()
610 return PTR_ERR(rockchip->vpcie3v3); in rockchip_pcie_parse_host_dt()
614 rockchip->vpcie1v8 = devm_regulator_get(dev, "vpcie1v8"); in rockchip_pcie_parse_host_dt()
615 if (IS_ERR(rockchip->vpcie1v8)) in rockchip_pcie_parse_host_dt()
616 return PTR_ERR(rockchip->vpcie1v8); in rockchip_pcie_parse_host_dt()
618 rockchip->vpcie0v9 = devm_regulator_get(dev, "vpcie0v9"); in rockchip_pcie_parse_host_dt()
619 if (IS_ERR(rockchip->vpcie0v9)) in rockchip_pcie_parse_host_dt()
620 return PTR_ERR(rockchip->vpcie0v9); in rockchip_pcie_parse_host_dt()
625 static int rockchip_pcie_set_vpcie(struct rockchip_pcie *rockchip) in rockchip_pcie_set_vpcie() argument
627 struct device *dev = rockchip->dev; in rockchip_pcie_set_vpcie()
630 if (!IS_ERR(rockchip->vpcie12v)) { in rockchip_pcie_set_vpcie()
631 err = regulator_enable(rockchip->vpcie12v); in rockchip_pcie_set_vpcie()
638 if (!IS_ERR(rockchip->vpcie3v3)) { in rockchip_pcie_set_vpcie()
639 err = regulator_enable(rockchip->vpcie3v3); in rockchip_pcie_set_vpcie()
646 err = regulator_enable(rockchip->vpcie1v8); in rockchip_pcie_set_vpcie()
652 err = regulator_enable(rockchip->vpcie0v9); in rockchip_pcie_set_vpcie()
661 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_set_vpcie()
663 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_set_vpcie()
664 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_set_vpcie()
666 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_set_vpcie()
667 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_set_vpcie()
672 static void rockchip_pcie_enable_interrupts(struct rockchip_pcie *rockchip) in rockchip_pcie_enable_interrupts() argument
674 rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) & in rockchip_pcie_enable_interrupts()
676 rockchip_pcie_write(rockchip, (u32)(~PCIE_CORE_INT), in rockchip_pcie_enable_interrupts()
679 rockchip_pcie_enable_bw_int(rockchip); in rockchip_pcie_enable_interrupts()
695 static int rockchip_pcie_init_irq_domain(struct rockchip_pcie *rockchip) in rockchip_pcie_init_irq_domain() argument
697 struct device *dev = rockchip->dev; in rockchip_pcie_init_irq_domain()
705 rockchip->irq_domain = irq_domain_add_linear(intc, PCI_NUM_INTX, in rockchip_pcie_init_irq_domain()
706 &intx_domain_ops, rockchip); in rockchip_pcie_init_irq_domain()
708 if (!rockchip->irq_domain) { in rockchip_pcie_init_irq_domain()
716 static int rockchip_pcie_prog_ob_atu(struct rockchip_pcie *rockchip, in rockchip_pcie_prog_ob_atu() argument
747 rockchip_pcie_write(rockchip, ob_addr_0, in rockchip_pcie_prog_ob_atu()
749 rockchip_pcie_write(rockchip, ob_addr_1, in rockchip_pcie_prog_ob_atu()
751 rockchip_pcie_write(rockchip, ob_desc_0, in rockchip_pcie_prog_ob_atu()
753 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_prog_ob_atu()
759 static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip, in rockchip_pcie_prog_ib_atu() argument
780 rockchip_pcie_write(rockchip, ib_addr_0, PCIE_RP_IB_ADDR0 + aw_offset); in rockchip_pcie_prog_ib_atu()
781 rockchip_pcie_write(rockchip, ib_addr_1, PCIE_RP_IB_ADDR1 + aw_offset); in rockchip_pcie_prog_ib_atu()
786 static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip) in rockchip_pcie_cfg_atu() argument
788 struct device *dev = rockchip->dev; in rockchip_pcie_cfg_atu()
789 struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip); in rockchip_pcie_cfg_atu()
796 rockchip_pcie_cfg_configuration_accesses(rockchip, in rockchip_pcie_cfg_atu()
804 rockchip->msg_bus_addr = pci_addr; in rockchip_pcie_cfg_atu()
807 err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1, in rockchip_pcie_cfg_atu()
818 err = rockchip_pcie_prog_ib_atu(rockchip, 2, 32 - 1, 0x0, 0); in rockchip_pcie_cfg_atu()
835 err = rockchip_pcie_prog_ob_atu(rockchip, in rockchip_pcie_cfg_atu()
848 rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1 + offset, in rockchip_pcie_cfg_atu()
852 rockchip->msg_bus_addr += ((reg_no + offset) << 20); in rockchip_pcie_cfg_atu()
856 static int rockchip_pcie_wait_l2(struct rockchip_pcie *rockchip) in rockchip_pcie_wait_l2() argument
862 writel(0x0, rockchip->msg_region + PCIE_RC_SEND_PME_OFF); in rockchip_pcie_wait_l2()
865 err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_DEBUG_OUT_0, in rockchip_pcie_wait_l2()
869 dev_err(rockchip->dev, "PCIe link enter L2 timeout!\n"); in rockchip_pcie_wait_l2()
878 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_suspend_noirq() local
882 rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) | in rockchip_pcie_suspend_noirq()
884 rockchip_pcie_write(rockchip, (u32)PCIE_CORE_INT, PCIE_CORE_INT_MASK); in rockchip_pcie_suspend_noirq()
886 ret = rockchip_pcie_wait_l2(rockchip); in rockchip_pcie_suspend_noirq()
888 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_suspend_noirq()
892 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_suspend_noirq()
894 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_suspend_noirq()
896 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_suspend_noirq()
903 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_resume_noirq() local
906 err = regulator_enable(rockchip->vpcie0v9); in rockchip_pcie_resume_noirq()
912 err = rockchip_pcie_enable_clocks(rockchip); in rockchip_pcie_resume_noirq()
916 err = rockchip_pcie_host_init_port(rockchip); in rockchip_pcie_resume_noirq()
920 err = rockchip_pcie_cfg_atu(rockchip); in rockchip_pcie_resume_noirq()
925 rockchip_pcie_update_txcredit_mui(rockchip); in rockchip_pcie_resume_noirq()
926 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_resume_noirq()
931 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_resume_noirq()
933 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_resume_noirq()
935 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_resume_noirq()
941 struct rockchip_pcie *rockchip; in rockchip_pcie_probe() local
949 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rockchip)); in rockchip_pcie_probe()
953 rockchip = pci_host_bridge_priv(bridge); in rockchip_pcie_probe()
955 platform_set_drvdata(pdev, rockchip); in rockchip_pcie_probe()
956 rockchip->dev = dev; in rockchip_pcie_probe()
957 rockchip->is_rc = true; in rockchip_pcie_probe()
959 err = rockchip_pcie_parse_host_dt(rockchip); in rockchip_pcie_probe()
963 err = rockchip_pcie_enable_clocks(rockchip); in rockchip_pcie_probe()
967 err = rockchip_pcie_set_vpcie(rockchip); in rockchip_pcie_probe()
973 err = rockchip_pcie_host_init_port(rockchip); in rockchip_pcie_probe()
977 rockchip_pcie_enable_interrupts(rockchip); in rockchip_pcie_probe()
979 err = rockchip_pcie_init_irq_domain(rockchip); in rockchip_pcie_probe()
983 err = rockchip_pcie_cfg_atu(rockchip); in rockchip_pcie_probe()
987 rockchip->msg_region = devm_ioremap(dev, rockchip->msg_bus_addr, SZ_1M); in rockchip_pcie_probe()
988 if (!rockchip->msg_region) { in rockchip_pcie_probe()
993 bridge->sysdata = rockchip; in rockchip_pcie_probe()
1003 irq_domain_remove(rockchip->irq_domain); in rockchip_pcie_probe()
1005 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_probe()
1007 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_probe()
1008 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_probe()
1009 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_probe()
1010 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_probe()
1011 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_probe()
1012 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_probe()
1014 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_probe()
1021 struct rockchip_pcie *rockchip = dev_get_drvdata(dev); in rockchip_pcie_remove() local
1022 struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip); in rockchip_pcie_remove()
1026 irq_domain_remove(rockchip->irq_domain); in rockchip_pcie_remove()
1028 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_remove()
1030 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_remove()
1032 if (!IS_ERR(rockchip->vpcie12v)) in rockchip_pcie_remove()
1033 regulator_disable(rockchip->vpcie12v); in rockchip_pcie_remove()
1034 if (!IS_ERR(rockchip->vpcie3v3)) in rockchip_pcie_remove()
1035 regulator_disable(rockchip->vpcie3v3); in rockchip_pcie_remove()
1036 regulator_disable(rockchip->vpcie1v8); in rockchip_pcie_remove()
1037 regulator_disable(rockchip->vpcie0v9); in rockchip_pcie_remove()
1048 { .compatible = "rockchip,rk3399-pcie", },
1055 .name = "rockchip-pcie",
1064 MODULE_AUTHOR("Rockchip Inc");
1065 MODULE_DESCRIPTION("Rockchip AXI PCIe driver");