Lines Matching refs:pcie

315 	struct tegra_pcie *pcie;  member
331 static inline void afi_writel(struct tegra_pcie *pcie, u32 value, in afi_writel() argument
334 writel(value, pcie->afi + offset); in afi_writel()
337 static inline u32 afi_readl(struct tegra_pcie *pcie, unsigned long offset) in afi_readl() argument
339 return readl(pcie->afi + offset); in afi_readl()
342 static inline void pads_writel(struct tegra_pcie *pcie, u32 value, in pads_writel() argument
345 writel(value, pcie->pads + offset); in pads_writel()
348 static inline u32 pads_readl(struct tegra_pcie *pcie, unsigned long offset) in pads_readl() argument
350 return readl(pcie->pads + offset); in pads_readl()
385 struct tegra_pcie *pcie = bus->sysdata; in tegra_pcie_map_bus() local
392 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_map_bus()
406 afi_writel(pcie, base, AFI_FPCI_BAR0); in tegra_pcie_map_bus()
409 addr = pcie->cfg + (offset & (SZ_4K - 1)); in tegra_pcie_map_bus()
468 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_reset()
470 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_reset()
474 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_reset()
476 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_reset()
482 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_port_enable()
486 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_enable()
494 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_enable()
508 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_port_disable()
512 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_disable()
514 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_disable()
517 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_disable()
523 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_disable()
528 struct tegra_pcie *pcie = port->pcie; in tegra_pcie_port_free() local
529 struct device *dev = pcie->dev; in tegra_pcie_port_free()
555 static int tegra_pcie_request_resources(struct tegra_pcie *pcie) in tegra_pcie_request_resources() argument
557 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_request_resources()
559 struct device *dev = pcie->dev; in tegra_pcie_request_resources()
562 pci_add_resource_offset(windows, &pcie->pio, pcie->offset.io); in tegra_pcie_request_resources()
563 pci_add_resource_offset(windows, &pcie->mem, pcie->offset.mem); in tegra_pcie_request_resources()
564 pci_add_resource_offset(windows, &pcie->prefetch, pcie->offset.mem); in tegra_pcie_request_resources()
565 pci_add_resource(windows, &pcie->busn); in tegra_pcie_request_resources()
573 pci_remap_iospace(&pcie->pio, pcie->io.start); in tegra_pcie_request_resources()
578 static void tegra_pcie_free_resources(struct tegra_pcie *pcie) in tegra_pcie_free_resources() argument
580 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_free_resources()
583 pci_unmap_iospace(&pcie->pio); in tegra_pcie_free_resources()
589 struct tegra_pcie *pcie = pdev->bus->sysdata; in tegra_pcie_map_irq() local
596 irq = pcie->irq; in tegra_pcie_map_irq()
620 struct tegra_pcie *pcie = arg; in tegra_pcie_isr() local
621 struct device *dev = pcie->dev; in tegra_pcie_isr()
624 code = afi_readl(pcie, AFI_INTR_CODE) & AFI_INTR_CODE_MASK; in tegra_pcie_isr()
625 signature = afi_readl(pcie, AFI_INTR_SIGNATURE); in tegra_pcie_isr()
626 afi_writel(pcie, 0, AFI_INTR_CODE); in tegra_pcie_isr()
645 u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff; in tegra_pcie_isr()
665 static void tegra_pcie_setup_translations(struct tegra_pcie *pcie) in tegra_pcie_setup_translations() argument
670 size = resource_size(&pcie->cs); in tegra_pcie_setup_translations()
671 afi_writel(pcie, pcie->cs.start, AFI_AXI_BAR0_START); in tegra_pcie_setup_translations()
672 afi_writel(pcie, size >> 12, AFI_AXI_BAR0_SZ); in tegra_pcie_setup_translations()
676 size = resource_size(&pcie->io); in tegra_pcie_setup_translations()
677 axi_address = pcie->io.start; in tegra_pcie_setup_translations()
678 afi_writel(pcie, axi_address, AFI_AXI_BAR1_START); in tegra_pcie_setup_translations()
679 afi_writel(pcie, size >> 12, AFI_AXI_BAR1_SZ); in tegra_pcie_setup_translations()
680 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR1); in tegra_pcie_setup_translations()
683 fpci_bar = (((pcie->prefetch.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
684 size = resource_size(&pcie->prefetch); in tegra_pcie_setup_translations()
685 axi_address = pcie->prefetch.start; in tegra_pcie_setup_translations()
686 afi_writel(pcie, axi_address, AFI_AXI_BAR2_START); in tegra_pcie_setup_translations()
687 afi_writel(pcie, size >> 12, AFI_AXI_BAR2_SZ); in tegra_pcie_setup_translations()
688 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR2); in tegra_pcie_setup_translations()
691 fpci_bar = (((pcie->mem.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
692 size = resource_size(&pcie->mem); in tegra_pcie_setup_translations()
693 axi_address = pcie->mem.start; in tegra_pcie_setup_translations()
694 afi_writel(pcie, axi_address, AFI_AXI_BAR3_START); in tegra_pcie_setup_translations()
695 afi_writel(pcie, size >> 12, AFI_AXI_BAR3_SZ); in tegra_pcie_setup_translations()
696 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR3); in tegra_pcie_setup_translations()
699 afi_writel(pcie, 0, AFI_AXI_BAR4_START); in tegra_pcie_setup_translations()
700 afi_writel(pcie, 0, AFI_AXI_BAR4_SZ); in tegra_pcie_setup_translations()
701 afi_writel(pcie, 0, AFI_FPCI_BAR4); in tegra_pcie_setup_translations()
703 afi_writel(pcie, 0, AFI_AXI_BAR5_START); in tegra_pcie_setup_translations()
704 afi_writel(pcie, 0, AFI_AXI_BAR5_SZ); in tegra_pcie_setup_translations()
705 afi_writel(pcie, 0, AFI_FPCI_BAR5); in tegra_pcie_setup_translations()
708 afi_writel(pcie, 0, AFI_CACHE_BAR0_ST); in tegra_pcie_setup_translations()
709 afi_writel(pcie, 0, AFI_CACHE_BAR0_SZ); in tegra_pcie_setup_translations()
710 afi_writel(pcie, 0, AFI_CACHE_BAR1_ST); in tegra_pcie_setup_translations()
711 afi_writel(pcie, 0, AFI_CACHE_BAR1_SZ); in tegra_pcie_setup_translations()
714 afi_writel(pcie, 0, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_setup_translations()
715 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
716 afi_writel(pcie, 0, AFI_MSI_AXI_BAR_ST); in tegra_pcie_setup_translations()
717 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
720 static int tegra_pcie_pll_wait(struct tegra_pcie *pcie, unsigned long timeout) in tegra_pcie_pll_wait() argument
722 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pll_wait()
728 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_pll_wait()
736 static int tegra_pcie_phy_enable(struct tegra_pcie *pcie) in tegra_pcie_phy_enable() argument
738 struct device *dev = pcie->dev; in tegra_pcie_phy_enable()
739 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_enable()
744 pads_writel(pcie, 0x0, PADS_CTL_SEL); in tegra_pcie_phy_enable()
747 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
749 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
755 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
758 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
761 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
763 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
768 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
770 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
773 err = tegra_pcie_pll_wait(pcie, 500); in tegra_pcie_phy_enable()
780 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
782 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
785 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
787 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
792 static int tegra_pcie_phy_disable(struct tegra_pcie *pcie) in tegra_pcie_phy_disable() argument
794 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_disable()
798 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
800 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
803 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
805 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
808 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
810 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
819 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_on()
836 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_off()
852 static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) in tegra_pcie_phy_power_on() argument
854 struct device *dev = pcie->dev; in tegra_pcie_phy_power_on()
855 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_power_on()
859 if (pcie->legacy_phy) { in tegra_pcie_phy_power_on()
860 if (pcie->phy) in tegra_pcie_phy_power_on()
861 err = phy_power_on(pcie->phy); in tegra_pcie_phy_power_on()
863 err = tegra_pcie_phy_enable(pcie); in tegra_pcie_phy_power_on()
871 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_on()
882 pads_writel(pcie, soc->pads_refclk_cfg0, PADS_REFCLK_CFG0); in tegra_pcie_phy_power_on()
885 pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1); in tegra_pcie_phy_power_on()
890 static int tegra_pcie_phy_power_off(struct tegra_pcie *pcie) in tegra_pcie_phy_power_off() argument
892 struct device *dev = pcie->dev; in tegra_pcie_phy_power_off()
896 if (pcie->legacy_phy) { in tegra_pcie_phy_power_off()
897 if (pcie->phy) in tegra_pcie_phy_power_off()
898 err = phy_power_off(pcie->phy); in tegra_pcie_phy_power_off()
900 err = tegra_pcie_phy_disable(pcie); in tegra_pcie_phy_power_off()
908 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_off()
921 static int tegra_pcie_enable_controller(struct tegra_pcie *pcie) in tegra_pcie_enable_controller() argument
923 struct device *dev = pcie->dev; in tegra_pcie_enable_controller()
924 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_controller()
930 if (pcie->phy) { in tegra_pcie_enable_controller()
931 value = afi_readl(pcie, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
934 afi_writel(pcie, value, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
939 afi_writel(pcie, 0, AFI_PEXBIAS_CTRL_0); in tegra_pcie_enable_controller()
942 value = afi_readl(pcie, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
944 value |= AFI_PCIE_CONFIG_PCIE_DISABLE_ALL | pcie->xbar_config; in tegra_pcie_enable_controller()
946 list_for_each_entry(port, &pcie->ports, list) in tegra_pcie_enable_controller()
949 afi_writel(pcie, value, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
952 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
954 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
956 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
958 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
962 err = tegra_pcie_phy_power_on(pcie); in tegra_pcie_enable_controller()
970 reset_control_deassert(pcie->pcie_xrst); in tegra_pcie_enable_controller()
973 value = afi_readl(pcie, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
975 afi_writel(pcie, value, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
984 afi_writel(pcie, value, AFI_AFI_INTR_ENABLE); in tegra_pcie_enable_controller()
985 afi_writel(pcie, 0xffffffff, AFI_SM_INTR_ENABLE); in tegra_pcie_enable_controller()
988 afi_writel(pcie, AFI_INTR_MASK_INT_MASK, AFI_INTR_MASK); in tegra_pcie_enable_controller()
991 afi_writel(pcie, 0, AFI_FPCI_ERROR_MASKS); in tegra_pcie_enable_controller()
996 static void tegra_pcie_disable_controller(struct tegra_pcie *pcie) in tegra_pcie_disable_controller() argument
1000 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_disable_controller()
1002 if (pcie->soc->program_uphy) { in tegra_pcie_disable_controller()
1003 err = tegra_pcie_phy_power_off(pcie); in tegra_pcie_disable_controller()
1005 dev_err(pcie->dev, "failed to power off PHY(s): %d\n", in tegra_pcie_disable_controller()
1010 static void tegra_pcie_power_off(struct tegra_pcie *pcie) in tegra_pcie_power_off() argument
1012 struct device *dev = pcie->dev; in tegra_pcie_power_off()
1013 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_off()
1016 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_off()
1017 reset_control_assert(pcie->pex_rst); in tegra_pcie_power_off()
1019 clk_disable_unprepare(pcie->pll_e); in tegra_pcie_power_off()
1021 clk_disable_unprepare(pcie->cml_clk); in tegra_pcie_power_off()
1022 clk_disable_unprepare(pcie->afi_clk); in tegra_pcie_power_off()
1023 clk_disable_unprepare(pcie->pex_clk); in tegra_pcie_power_off()
1028 err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_off()
1033 static int tegra_pcie_power_on(struct tegra_pcie *pcie) in tegra_pcie_power_on() argument
1035 struct device *dev = pcie->dev; in tegra_pcie_power_on()
1036 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_on()
1039 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_power_on()
1040 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_on()
1041 reset_control_assert(pcie->pex_rst); in tegra_pcie_power_on()
1047 err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_on()
1052 err = clk_prepare_enable(pcie->pex_clk); in tegra_pcie_power_on()
1057 reset_control_deassert(pcie->pex_rst); in tegra_pcie_power_on()
1060 pcie->pex_clk, in tegra_pcie_power_on()
1061 pcie->pex_rst); in tegra_pcie_power_on()
1068 reset_control_deassert(pcie->afi_rst); in tegra_pcie_power_on()
1070 err = clk_prepare_enable(pcie->afi_clk); in tegra_pcie_power_on()
1077 err = clk_prepare_enable(pcie->cml_clk); in tegra_pcie_power_on()
1084 err = clk_prepare_enable(pcie->pll_e); in tegra_pcie_power_on()
1093 static int tegra_pcie_clocks_get(struct tegra_pcie *pcie) in tegra_pcie_clocks_get() argument
1095 struct device *dev = pcie->dev; in tegra_pcie_clocks_get()
1096 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_clocks_get()
1098 pcie->pex_clk = devm_clk_get(dev, "pex"); in tegra_pcie_clocks_get()
1099 if (IS_ERR(pcie->pex_clk)) in tegra_pcie_clocks_get()
1100 return PTR_ERR(pcie->pex_clk); in tegra_pcie_clocks_get()
1102 pcie->afi_clk = devm_clk_get(dev, "afi"); in tegra_pcie_clocks_get()
1103 if (IS_ERR(pcie->afi_clk)) in tegra_pcie_clocks_get()
1104 return PTR_ERR(pcie->afi_clk); in tegra_pcie_clocks_get()
1106 pcie->pll_e = devm_clk_get(dev, "pll_e"); in tegra_pcie_clocks_get()
1107 if (IS_ERR(pcie->pll_e)) in tegra_pcie_clocks_get()
1108 return PTR_ERR(pcie->pll_e); in tegra_pcie_clocks_get()
1111 pcie->cml_clk = devm_clk_get(dev, "cml"); in tegra_pcie_clocks_get()
1112 if (IS_ERR(pcie->cml_clk)) in tegra_pcie_clocks_get()
1113 return PTR_ERR(pcie->cml_clk); in tegra_pcie_clocks_get()
1119 static int tegra_pcie_resets_get(struct tegra_pcie *pcie) in tegra_pcie_resets_get() argument
1121 struct device *dev = pcie->dev; in tegra_pcie_resets_get()
1123 pcie->pex_rst = devm_reset_control_get_exclusive(dev, "pex"); in tegra_pcie_resets_get()
1124 if (IS_ERR(pcie->pex_rst)) in tegra_pcie_resets_get()
1125 return PTR_ERR(pcie->pex_rst); in tegra_pcie_resets_get()
1127 pcie->afi_rst = devm_reset_control_get_exclusive(dev, "afi"); in tegra_pcie_resets_get()
1128 if (IS_ERR(pcie->afi_rst)) in tegra_pcie_resets_get()
1129 return PTR_ERR(pcie->afi_rst); in tegra_pcie_resets_get()
1131 pcie->pcie_xrst = devm_reset_control_get_exclusive(dev, "pcie_x"); in tegra_pcie_resets_get()
1132 if (IS_ERR(pcie->pcie_xrst)) in tegra_pcie_resets_get()
1133 return PTR_ERR(pcie->pcie_xrst); in tegra_pcie_resets_get()
1138 static int tegra_pcie_phys_get_legacy(struct tegra_pcie *pcie) in tegra_pcie_phys_get_legacy() argument
1140 struct device *dev = pcie->dev; in tegra_pcie_phys_get_legacy()
1143 pcie->phy = devm_phy_optional_get(dev, "pcie"); in tegra_pcie_phys_get_legacy()
1144 if (IS_ERR(pcie->phy)) { in tegra_pcie_phys_get_legacy()
1145 err = PTR_ERR(pcie->phy); in tegra_pcie_phys_get_legacy()
1150 err = phy_init(pcie->phy); in tegra_pcie_phys_get_legacy()
1156 pcie->legacy_phy = true; in tegra_pcie_phys_get_legacy()
1184 struct device *dev = port->pcie->dev; in tegra_pcie_port_get_phys()
1214 static int tegra_pcie_phys_get(struct tegra_pcie *pcie) in tegra_pcie_phys_get() argument
1216 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phys_get()
1217 struct device_node *np = pcie->dev->of_node; in tegra_pcie_phys_get()
1222 return tegra_pcie_phys_get_legacy(pcie); in tegra_pcie_phys_get()
1224 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_get()
1233 static void tegra_pcie_phys_put(struct tegra_pcie *pcie) in tegra_pcie_phys_put() argument
1236 struct device *dev = pcie->dev; in tegra_pcie_phys_put()
1239 if (pcie->legacy_phy) { in tegra_pcie_phys_put()
1240 err = phy_exit(pcie->phy); in tegra_pcie_phys_put()
1246 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_put()
1257 static int tegra_pcie_get_resources(struct tegra_pcie *pcie) in tegra_pcie_get_resources() argument
1259 struct device *dev = pcie->dev; in tegra_pcie_get_resources()
1262 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_get_resources()
1265 err = tegra_pcie_clocks_get(pcie); in tegra_pcie_get_resources()
1271 err = tegra_pcie_resets_get(pcie); in tegra_pcie_get_resources()
1278 err = tegra_pcie_phys_get(pcie); in tegra_pcie_get_resources()
1286 pcie->pads = devm_ioremap_resource(dev, pads); in tegra_pcie_get_resources()
1287 if (IS_ERR(pcie->pads)) { in tegra_pcie_get_resources()
1288 err = PTR_ERR(pcie->pads); in tegra_pcie_get_resources()
1293 pcie->afi = devm_ioremap_resource(dev, afi); in tegra_pcie_get_resources()
1294 if (IS_ERR(pcie->afi)) { in tegra_pcie_get_resources()
1295 err = PTR_ERR(pcie->afi); in tegra_pcie_get_resources()
1306 pcie->cs = *res; in tegra_pcie_get_resources()
1309 pcie->cs.end = pcie->cs.start + SZ_4K - 1; in tegra_pcie_get_resources()
1311 pcie->cfg = devm_ioremap_resource(dev, &pcie->cs); in tegra_pcie_get_resources()
1312 if (IS_ERR(pcie->cfg)) { in tegra_pcie_get_resources()
1313 err = PTR_ERR(pcie->cfg); in tegra_pcie_get_resources()
1324 pcie->irq = err; in tegra_pcie_get_resources()
1326 err = request_irq(pcie->irq, tegra_pcie_isr, IRQF_SHARED, "PCIE", pcie); in tegra_pcie_get_resources()
1336 tegra_pcie_phys_put(pcie); in tegra_pcie_get_resources()
1340 static int tegra_pcie_put_resources(struct tegra_pcie *pcie) in tegra_pcie_put_resources() argument
1342 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_put_resources()
1344 if (pcie->irq > 0) in tegra_pcie_put_resources()
1345 free_irq(pcie->irq, pcie); in tegra_pcie_put_resources()
1348 tegra_pcie_phys_put(pcie); in tegra_pcie_put_resources()
1355 struct tegra_pcie *pcie = port->pcie; in tegra_pcie_pme_turnoff() local
1356 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pme_turnoff()
1361 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1363 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1366 err = readl_poll_timeout(pcie->afi + AFI_PCIE_PME, val, in tegra_pcie_pme_turnoff()
1369 dev_err(pcie->dev, "PME Ack is not received on port: %d\n", in tegra_pcie_pme_turnoff()
1374 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1376 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1412 struct tegra_pcie *pcie = data; in tegra_pcie_msi_irq() local
1413 struct device *dev = pcie->dev; in tegra_pcie_msi_irq()
1414 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_irq()
1418 unsigned long reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1426 afi_writel(pcie, 1 << offset, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1443 reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1515 static int tegra_pcie_msi_setup(struct tegra_pcie *pcie) in tegra_pcie_msi_setup() argument
1517 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_msi_setup()
1518 struct platform_device *pdev = to_platform_device(pcie->dev); in tegra_pcie_msi_setup()
1519 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_setup()
1520 struct device *dev = pcie->dev; in tegra_pcie_msi_setup()
1545 tegra_msi_irq_chip.name, pcie); in tegra_pcie_msi_setup()
1563 static void tegra_pcie_enable_msi(struct tegra_pcie *pcie) in tegra_pcie_enable_msi() argument
1565 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_msi()
1566 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_enable_msi()
1569 afi_writel(pcie, msi->phys >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_enable_msi()
1570 afi_writel(pcie, msi->phys, AFI_MSI_AXI_BAR_ST); in tegra_pcie_enable_msi()
1572 afi_writel(pcie, 1, AFI_MSI_BAR_SZ); in tegra_pcie_enable_msi()
1575 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC0); in tegra_pcie_enable_msi()
1576 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC1); in tegra_pcie_enable_msi()
1577 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC2); in tegra_pcie_enable_msi()
1578 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC3); in tegra_pcie_enable_msi()
1579 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC4); in tegra_pcie_enable_msi()
1580 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC5); in tegra_pcie_enable_msi()
1581 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC6); in tegra_pcie_enable_msi()
1582 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC7); in tegra_pcie_enable_msi()
1585 reg = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1587 afi_writel(pcie, reg, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1590 static void tegra_pcie_msi_teardown(struct tegra_pcie *pcie) in tegra_pcie_msi_teardown() argument
1592 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_teardown()
1598 free_irq(msi->irq, pcie); in tegra_pcie_msi_teardown()
1609 static int tegra_pcie_disable_msi(struct tegra_pcie *pcie) in tegra_pcie_disable_msi() argument
1614 value = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1616 afi_writel(pcie, value, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1619 afi_writel(pcie, 0, AFI_MSI_EN_VEC0); in tegra_pcie_disable_msi()
1620 afi_writel(pcie, 0, AFI_MSI_EN_VEC1); in tegra_pcie_disable_msi()
1621 afi_writel(pcie, 0, AFI_MSI_EN_VEC2); in tegra_pcie_disable_msi()
1622 afi_writel(pcie, 0, AFI_MSI_EN_VEC3); in tegra_pcie_disable_msi()
1623 afi_writel(pcie, 0, AFI_MSI_EN_VEC4); in tegra_pcie_disable_msi()
1624 afi_writel(pcie, 0, AFI_MSI_EN_VEC5); in tegra_pcie_disable_msi()
1625 afi_writel(pcie, 0, AFI_MSI_EN_VEC6); in tegra_pcie_disable_msi()
1626 afi_writel(pcie, 0, AFI_MSI_EN_VEC7); in tegra_pcie_disable_msi()
1631 static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes, in tegra_pcie_get_xbar_config() argument
1634 struct device *dev = pcie->dev; in tegra_pcie_get_xbar_config()
1737 static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie) in tegra_pcie_get_legacy_regulators() argument
1739 struct device *dev = pcie->dev; in tegra_pcie_get_legacy_regulators()
1743 pcie->num_supplies = 3; in tegra_pcie_get_legacy_regulators()
1745 pcie->num_supplies = 2; in tegra_pcie_get_legacy_regulators()
1747 if (pcie->num_supplies == 0) { in tegra_pcie_get_legacy_regulators()
1752 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_legacy_regulators()
1753 sizeof(*pcie->supplies), in tegra_pcie_get_legacy_regulators()
1755 if (!pcie->supplies) in tegra_pcie_get_legacy_regulators()
1758 pcie->supplies[0].supply = "pex-clk"; in tegra_pcie_get_legacy_regulators()
1759 pcie->supplies[1].supply = "vdd"; in tegra_pcie_get_legacy_regulators()
1761 if (pcie->num_supplies > 2) in tegra_pcie_get_legacy_regulators()
1762 pcie->supplies[2].supply = "avdd"; in tegra_pcie_get_legacy_regulators()
1764 return devm_regulator_bulk_get(dev, pcie->num_supplies, pcie->supplies); in tegra_pcie_get_legacy_regulators()
1776 static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask) in tegra_pcie_get_regulators() argument
1778 struct device *dev = pcie->dev; in tegra_pcie_get_regulators()
1783 pcie->num_supplies = 4; in tegra_pcie_get_regulators()
1785 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1786 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1788 if (!pcie->supplies) in tegra_pcie_get_regulators()
1791 pcie->supplies[i++].supply = "dvdd-pex"; in tegra_pcie_get_regulators()
1792 pcie->supplies[i++].supply = "hvdd-pex-pll"; in tegra_pcie_get_regulators()
1793 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1794 pcie->supplies[i++].supply = "vddio-pexctl-aud"; in tegra_pcie_get_regulators()
1796 pcie->num_supplies = 6; in tegra_pcie_get_regulators()
1798 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1799 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1801 if (!pcie->supplies) in tegra_pcie_get_regulators()
1804 pcie->supplies[i++].supply = "avdd-pll-uerefe"; in tegra_pcie_get_regulators()
1805 pcie->supplies[i++].supply = "hvddio-pex"; in tegra_pcie_get_regulators()
1806 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
1807 pcie->supplies[i++].supply = "dvdd-pex-pll"; in tegra_pcie_get_regulators()
1808 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
1809 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1811 pcie->num_supplies = 7; in tegra_pcie_get_regulators()
1813 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1814 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1816 if (!pcie->supplies) in tegra_pcie_get_regulators()
1819 pcie->supplies[i++].supply = "avddio-pex"; in tegra_pcie_get_regulators()
1820 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
1821 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1822 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1823 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
1824 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1825 pcie->supplies[i++].supply = "avdd-pll-erefe"; in tegra_pcie_get_regulators()
1837 pcie->num_supplies = 4 + (need_pexa ? 2 : 0) + in tegra_pcie_get_regulators()
1840 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1841 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1843 if (!pcie->supplies) in tegra_pcie_get_regulators()
1846 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1847 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1848 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1849 pcie->supplies[i++].supply = "avdd-plle"; in tegra_pcie_get_regulators()
1852 pcie->supplies[i++].supply = "avdd-pexa"; in tegra_pcie_get_regulators()
1853 pcie->supplies[i++].supply = "vdd-pexa"; in tegra_pcie_get_regulators()
1857 pcie->supplies[i++].supply = "avdd-pexb"; in tegra_pcie_get_regulators()
1858 pcie->supplies[i++].supply = "vdd-pexb"; in tegra_pcie_get_regulators()
1861 pcie->num_supplies = 5; in tegra_pcie_get_regulators()
1863 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1864 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1866 if (!pcie->supplies) in tegra_pcie_get_regulators()
1869 pcie->supplies[0].supply = "avdd-pex"; in tegra_pcie_get_regulators()
1870 pcie->supplies[1].supply = "vdd-pex"; in tegra_pcie_get_regulators()
1871 pcie->supplies[2].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1872 pcie->supplies[3].supply = "avdd-plle"; in tegra_pcie_get_regulators()
1873 pcie->supplies[4].supply = "vddio-pex-clk"; in tegra_pcie_get_regulators()
1876 if (of_regulator_bulk_available(dev->of_node, pcie->supplies, in tegra_pcie_get_regulators()
1877 pcie->num_supplies)) in tegra_pcie_get_regulators()
1878 return devm_regulator_bulk_get(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1879 pcie->supplies); in tegra_pcie_get_regulators()
1888 devm_kfree(dev, pcie->supplies); in tegra_pcie_get_regulators()
1889 pcie->num_supplies = 0; in tegra_pcie_get_regulators()
1891 return tegra_pcie_get_legacy_regulators(pcie); in tegra_pcie_get_regulators()
1894 static int tegra_pcie_parse_dt(struct tegra_pcie *pcie) in tegra_pcie_parse_dt() argument
1896 struct device *dev = pcie->dev; in tegra_pcie_parse_dt()
1898 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_parse_dt()
1919 pcie->offset.io = res.start - range.pci_addr; in tegra_pcie_parse_dt()
1921 memcpy(&pcie->pio, &res, sizeof(res)); in tegra_pcie_parse_dt()
1922 pcie->pio.name = np->full_name; in tegra_pcie_parse_dt()
1932 pcie->io.start = range.cpu_addr; in tegra_pcie_parse_dt()
1933 pcie->io.end = range.cpu_addr + range.size - 1; in tegra_pcie_parse_dt()
1934 pcie->io.flags = IORESOURCE_MEM; in tegra_pcie_parse_dt()
1935 pcie->io.name = "I/O"; in tegra_pcie_parse_dt()
1937 memcpy(&res, &pcie->io, sizeof(res)); in tegra_pcie_parse_dt()
1947 pcie->offset.mem = res.start - range.pci_addr; in tegra_pcie_parse_dt()
1950 memcpy(&pcie->prefetch, &res, sizeof(res)); in tegra_pcie_parse_dt()
1951 pcie->prefetch.name = "prefetchable"; in tegra_pcie_parse_dt()
1953 memcpy(&pcie->mem, &res, sizeof(res)); in tegra_pcie_parse_dt()
1954 pcie->mem.name = "non-prefetchable"; in tegra_pcie_parse_dt()
1960 err = of_pci_parse_bus_range(np, &pcie->busn); in tegra_pcie_parse_dt()
1963 pcie->busn.name = np->name; in tegra_pcie_parse_dt()
1964 pcie->busn.start = 0; in tegra_pcie_parse_dt()
1965 pcie->busn.end = 0xff; in tegra_pcie_parse_dt()
1966 pcie->busn.flags = IORESOURCE_BUS; in tegra_pcie_parse_dt()
2025 rp->pcie = pcie; in tegra_pcie_parse_dt()
2032 list_add_tail(&rp->list, &pcie->ports); in tegra_pcie_parse_dt()
2035 err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config); in tegra_pcie_parse_dt()
2041 err = tegra_pcie_get_regulators(pcie, mask); in tegra_pcie_parse_dt()
2056 struct device *dev = port->pcie->dev; in tegra_pcie_port_check_link()
2101 static void tegra_pcie_enable_ports(struct tegra_pcie *pcie) in tegra_pcie_enable_ports() argument
2103 struct device *dev = pcie->dev; in tegra_pcie_enable_ports()
2106 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in tegra_pcie_enable_ports()
2122 static void tegra_pcie_disable_ports(struct tegra_pcie *pcie) in tegra_pcie_disable_ports() argument
2126 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_disable_ports()
2240 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_start() local
2242 if (list_empty(&pcie->ports)) in tegra_pcie_ports_seq_start()
2247 return seq_list_start(&pcie->ports, *pos); in tegra_pcie_ports_seq_start()
2252 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_next() local
2254 return seq_list_next(v, &pcie->ports, pos); in tegra_pcie_ports_seq_next()
2304 struct tegra_pcie *pcie = inode->i_private; in tegra_pcie_ports_open() local
2313 s->private = pcie; in tegra_pcie_ports_open()
2326 static void tegra_pcie_debugfs_exit(struct tegra_pcie *pcie) in tegra_pcie_debugfs_exit() argument
2328 debugfs_remove_recursive(pcie->debugfs); in tegra_pcie_debugfs_exit()
2329 pcie->debugfs = NULL; in tegra_pcie_debugfs_exit()
2332 static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie) in tegra_pcie_debugfs_init() argument
2336 pcie->debugfs = debugfs_create_dir("pcie", NULL); in tegra_pcie_debugfs_init()
2337 if (!pcie->debugfs) in tegra_pcie_debugfs_init()
2340 file = debugfs_create_file("ports", S_IFREG | S_IRUGO, pcie->debugfs, in tegra_pcie_debugfs_init()
2341 pcie, &tegra_pcie_ports_ops); in tegra_pcie_debugfs_init()
2348 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_debugfs_init()
2356 struct tegra_pcie *pcie; in tegra_pcie_probe() local
2360 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in tegra_pcie_probe()
2364 pcie = pci_host_bridge_priv(host); in tegra_pcie_probe()
2365 host->sysdata = pcie; in tegra_pcie_probe()
2366 platform_set_drvdata(pdev, pcie); in tegra_pcie_probe()
2368 pcie->soc = of_device_get_match_data(dev); in tegra_pcie_probe()
2369 INIT_LIST_HEAD(&pcie->ports); in tegra_pcie_probe()
2370 pcie->dev = dev; in tegra_pcie_probe()
2372 err = tegra_pcie_parse_dt(pcie); in tegra_pcie_probe()
2376 err = tegra_pcie_get_resources(pcie); in tegra_pcie_probe()
2382 err = tegra_pcie_msi_setup(pcie); in tegra_pcie_probe()
2388 pm_runtime_enable(pcie->dev); in tegra_pcie_probe()
2389 err = pm_runtime_get_sync(pcie->dev); in tegra_pcie_probe()
2395 err = tegra_pcie_request_resources(pcie); in tegra_pcie_probe()
2399 host->busnr = pcie->busn.start; in tegra_pcie_probe()
2420 err = tegra_pcie_debugfs_init(pcie); in tegra_pcie_probe()
2428 tegra_pcie_free_resources(pcie); in tegra_pcie_probe()
2430 pm_runtime_put_sync(pcie->dev); in tegra_pcie_probe()
2431 pm_runtime_disable(pcie->dev); in tegra_pcie_probe()
2433 tegra_pcie_msi_teardown(pcie); in tegra_pcie_probe()
2435 tegra_pcie_put_resources(pcie); in tegra_pcie_probe()
2441 struct tegra_pcie *pcie = platform_get_drvdata(pdev); in tegra_pcie_remove() local
2442 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_remove()
2446 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_remove()
2450 tegra_pcie_free_resources(pcie); in tegra_pcie_remove()
2451 pm_runtime_put_sync(pcie->dev); in tegra_pcie_remove()
2452 pm_runtime_disable(pcie->dev); in tegra_pcie_remove()
2455 tegra_pcie_msi_teardown(pcie); in tegra_pcie_remove()
2457 tegra_pcie_put_resources(pcie); in tegra_pcie_remove()
2459 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_remove()
2467 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_suspend() local
2470 list_for_each_entry(port, &pcie->ports, list) in tegra_pcie_pm_suspend()
2473 tegra_pcie_disable_ports(pcie); in tegra_pcie_pm_suspend()
2476 tegra_pcie_disable_msi(pcie); in tegra_pcie_pm_suspend()
2478 tegra_pcie_disable_controller(pcie); in tegra_pcie_pm_suspend()
2479 tegra_pcie_power_off(pcie); in tegra_pcie_pm_suspend()
2486 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_resume() local
2489 err = tegra_pcie_power_on(pcie); in tegra_pcie_pm_resume()
2494 err = tegra_pcie_enable_controller(pcie); in tegra_pcie_pm_resume()
2499 tegra_pcie_setup_translations(pcie); in tegra_pcie_pm_resume()
2502 tegra_pcie_enable_msi(pcie); in tegra_pcie_pm_resume()
2504 tegra_pcie_enable_ports(pcie); in tegra_pcie_pm_resume()
2509 tegra_pcie_power_off(pcie); in tegra_pcie_pm_resume()