Lines Matching full:rockchip

3  * Rockchip AXI PCIe endpoint controller driver
5 * Copyright (c) 2018 Rockchip, Inc.
24 #include "pcie-rockchip.h"
28 * @rockchip: Rockchip PCIe controller
49 struct rockchip_pcie rockchip; member
65 static void rockchip_pcie_clear_ep_ob_atu(struct rockchip_pcie *rockchip, in rockchip_pcie_clear_ep_ob_atu() argument
68 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_clear_ep_ob_atu()
70 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_clear_ep_ob_atu()
72 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_clear_ep_ob_atu()
74 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_clear_ep_ob_atu()
78 static int rockchip_pcie_ep_ob_atu_num_bits(struct rockchip_pcie *rockchip, in rockchip_pcie_ep_ob_atu_num_bits() argument
88 static void rockchip_pcie_prog_ep_ob_atu(struct rockchip_pcie *rockchip, u8 fn, in rockchip_pcie_prog_ep_ob_atu() argument
95 num_pass_bits = rockchip_pcie_ep_ob_atu_num_bits(rockchip, in rockchip_pcie_prog_ep_ob_atu()
104 rockchip_pcie_write(rockchip, addr0, in rockchip_pcie_prog_ep_ob_atu()
106 rockchip_pcie_write(rockchip, addr1, in rockchip_pcie_prog_ep_ob_atu()
108 rockchip_pcie_write(rockchip, desc0, in rockchip_pcie_prog_ep_ob_atu()
110 rockchip_pcie_write(rockchip, 0, in rockchip_pcie_prog_ep_ob_atu()
119 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_write_header() local
123 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_write_header()
128 reg = rockchip_pcie_read(rockchip, PCIE_EP_CONFIG_DID_VID); in rockchip_pcie_ep_write_header()
130 rockchip_pcie_write(rockchip, reg, PCIE_EP_CONFIG_DID_VID); in rockchip_pcie_ep_write_header()
132 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_write_header()
138 rockchip_pcie_write(rockchip, hdr->cache_line_size, in rockchip_pcie_ep_write_header()
141 rockchip_pcie_write(rockchip, hdr->subsys_id << 16, in rockchip_pcie_ep_write_header()
144 rockchip_pcie_write(rockchip, hdr->interrupt_pin << 8, in rockchip_pcie_ep_write_header()
155 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_set_bar() local
204 cfg = rockchip_pcie_read(rockchip, reg); in rockchip_pcie_ep_set_bar()
210 rockchip_pcie_write(rockchip, cfg, reg); in rockchip_pcie_ep_set_bar()
211 rockchip_pcie_write(rockchip, addr0, in rockchip_pcie_ep_set_bar()
213 rockchip_pcie_write(rockchip, addr1, in rockchip_pcie_ep_set_bar()
223 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_clear_bar() local
236 cfg = rockchip_pcie_read(rockchip, reg); in rockchip_pcie_ep_clear_bar()
241 rockchip_pcie_write(rockchip, cfg, reg); in rockchip_pcie_ep_clear_bar()
242 rockchip_pcie_write(rockchip, 0x0, in rockchip_pcie_ep_clear_bar()
244 rockchip_pcie_write(rockchip, 0x0, in rockchip_pcie_ep_clear_bar()
261 num_bits = rockchip_pcie_ep_ob_atu_num_bits(&ep->rockchip, in rockchip_pcie_ep_align_addr()
280 struct rockchip_pcie *pcie = &ep->rockchip; in rockchip_pcie_ep_map_addr()
298 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_unmap_addr() local
304 rockchip_pcie_clear_ep_ob_atu(rockchip, r); in rockchip_pcie_ep_unmap_addr()
314 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_set_msi() local
317 flags = rockchip_pcie_read(rockchip, in rockchip_pcie_ep_set_msi()
325 rockchip_pcie_write(rockchip, flags, in rockchip_pcie_ep_set_msi()
334 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_get_msi() local
337 flags = rockchip_pcie_read(rockchip, in rockchip_pcie_ep_get_msi()
350 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_assert_intx() local
356 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_assert_intx()
362 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_assert_intx()
374 cmd = rockchip_pcie_read(&ep->rockchip, in rockchip_pcie_ep_send_intx_irq()
395 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_send_msi_irq() local
403 flags = rockchip_pcie_read(&ep->rockchip, in rockchip_pcie_ep_send_msi_irq()
418 data = rockchip_pcie_read(rockchip, in rockchip_pcie_ep_send_msi_irq()
425 pci_addr = rockchip_pcie_read(rockchip, in rockchip_pcie_ep_send_msi_irq()
430 pci_addr |= rockchip_pcie_read(rockchip, in rockchip_pcie_ep_send_msi_irq()
442 rockchip_pcie_prog_ep_ob_atu(rockchip, fn, in rockchip_pcie_ep_send_msi_irq()
472 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_start() local
480 rockchip_pcie_write(rockchip, cfg, PCIE_CORE_PHY_FUNC_CFG); in rockchip_pcie_ep_start()
482 if (rockchip->perst_gpio) in rockchip_pcie_ep_start()
486 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_start()
491 if (!rockchip->perst_gpio) in rockchip_pcie_ep_start()
500 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_stop() local
502 if (rockchip->perst_gpio) { in rockchip_pcie_ep_stop()
510 rockchip_pcie_write(rockchip, in rockchip_pcie_ep_stop()
516 static void rockchip_pcie_ep_retrain_link(struct rockchip_pcie *rockchip) in rockchip_pcie_ep_retrain_link() argument
520 status = rockchip_pcie_read(rockchip, PCIE_EP_CONFIG_LCS); in rockchip_pcie_ep_retrain_link()
522 rockchip_pcie_write(rockchip, status, PCIE_EP_CONFIG_LCS); in rockchip_pcie_ep_retrain_link()
525 static bool rockchip_pcie_ep_link_up(struct rockchip_pcie *rockchip) in rockchip_pcie_ep_link_up() argument
527 u32 val = rockchip_pcie_read(rockchip, PCIE_CLIENT_BASIC_STATUS1); in rockchip_pcie_ep_link_up()
536 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_link_training() local
537 struct device *dev = rockchip->dev; in rockchip_pcie_ep_link_training()
542 ret = readl_poll_timeout(rockchip->apb_base + PCIE_CORE_CTRL, in rockchip_pcie_ep_link_training()
549 ret = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_BASIC_STATUS1, in rockchip_pcie_ep_link_training()
559 val = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL); in rockchip_pcie_ep_link_training()
560 if (!PCIE_LINK_IS_GEN2(val) && rockchip->link_gen == 2) { in rockchip_pcie_ep_link_training()
562 rockchip_pcie_ep_retrain_link(rockchip); in rockchip_pcie_ep_link_training()
563 readl_poll_timeout(rockchip->apb_base + PCIE_CORE_CTRL, in rockchip_pcie_ep_link_training()
569 if (!rockchip_pcie_ep_link_up(rockchip)) in rockchip_pcie_ep_link_training()
579 val = rockchip_pcie_read(rockchip, PCIE_CLIENT_BASIC_STATUS0); in rockchip_pcie_ep_link_training()
598 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_perst_assert() local
600 dev_dbg(rockchip->dev, "PERST# asserted, link down\n"); in rockchip_pcie_ep_perst_assert()
617 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_perst_deassert() local
619 dev_dbg(rockchip->dev, "PERST# de-asserted, starting link training\n"); in rockchip_pcie_ep_perst_deassert()
627 rockchip_pcie_ep_retrain_link(rockchip); in rockchip_pcie_ep_perst_deassert()
637 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_perst_irq_thread() local
638 u32 perst = gpiod_get_value(rockchip->perst_gpio); in rockchip_pcie_ep_perst_irq_thread()
654 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_setup_irq() local
655 struct device *dev = rockchip->dev; in rockchip_pcie_ep_setup_irq()
658 if (!rockchip->perst_gpio) in rockchip_pcie_ep_setup_irq()
662 ep->perst_irq = gpiod_to_irq(rockchip->perst_gpio); in rockchip_pcie_ep_setup_irq()
721 static int rockchip_pcie_ep_get_resources(struct rockchip_pcie *rockchip, in rockchip_pcie_ep_get_resources() argument
724 struct device *dev = rockchip->dev; in rockchip_pcie_ep_get_resources()
727 err = rockchip_pcie_parse_dt(rockchip); in rockchip_pcie_ep_get_resources()
731 err = rockchip_pcie_get_phys(rockchip); in rockchip_pcie_ep_get_resources()
736 "rockchip,max-outbound-regions", in rockchip_pcie_ep_get_resources()
752 { .compatible = "rockchip,rk3399-pcie-ep"},
758 struct rockchip_pcie *rockchip = &ep->rockchip; in rockchip_pcie_ep_init_ob_mem() local
759 struct device *dev = rockchip->dev; in rockchip_pcie_ep_init_ob_mem()
775 windows[i].phys_base = rockchip->mem_res->start + (SZ_1M * i); in rockchip_pcie_ep_init_ob_mem()
810 static void rockchip_pcie_ep_hide_broken_msix_cap(struct rockchip_pcie *rockchip) in rockchip_pcie_ep_hide_broken_msix_cap() argument
823 cfg_msi = rockchip_pcie_read(rockchip, PCIE_EP_CONFIG_BASE + in rockchip_pcie_ep_hide_broken_msix_cap()
828 cfg_msix_cp = rockchip_pcie_read(rockchip, PCIE_EP_CONFIG_BASE + in rockchip_pcie_ep_hide_broken_msix_cap()
834 rockchip_pcie_write(rockchip, cfg_msi, in rockchip_pcie_ep_hide_broken_msix_cap()
842 struct rockchip_pcie *rockchip; in rockchip_pcie_ep_probe() local
850 rockchip = &ep->rockchip; in rockchip_pcie_ep_probe()
851 rockchip->is_rc = false; in rockchip_pcie_ep_probe()
852 rockchip->dev = dev; in rockchip_pcie_ep_probe()
864 err = rockchip_pcie_ep_get_resources(rockchip, ep); in rockchip_pcie_ep_probe()
872 err = rockchip_pcie_enable_clocks(rockchip); in rockchip_pcie_ep_probe()
876 err = rockchip_pcie_init_port(rockchip); in rockchip_pcie_ep_probe()
880 rockchip_pcie_ep_hide_broken_msix_cap(rockchip); in rockchip_pcie_ep_probe()
883 rockchip_pcie_write(rockchip, BIT(0), PCIE_CORE_PHY_FUNC_CFG); in rockchip_pcie_ep_probe()
893 rockchip_pcie_deinit_phys(rockchip); in rockchip_pcie_ep_probe()
895 rockchip_pcie_disable_clocks(rockchip); in rockchip_pcie_ep_probe()
903 .name = "rockchip-pcie-ep",