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()
558 static int tegra_pcie_request_resources(struct tegra_pcie *pcie) in tegra_pcie_request_resources() argument
560 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_request_resources()
562 struct device *dev = pcie->dev; in tegra_pcie_request_resources()
565 pci_add_resource_offset(windows, &pcie->pio, pcie->offset.io); in tegra_pcie_request_resources()
566 pci_add_resource_offset(windows, &pcie->mem, pcie->offset.mem); in tegra_pcie_request_resources()
567 pci_add_resource_offset(windows, &pcie->prefetch, pcie->offset.mem); in tegra_pcie_request_resources()
568 pci_add_resource(windows, &pcie->busn); in tegra_pcie_request_resources()
576 pci_remap_iospace(&pcie->pio, pcie->io.start); in tegra_pcie_request_resources()
581 static void tegra_pcie_free_resources(struct tegra_pcie *pcie) in tegra_pcie_free_resources() argument
583 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_free_resources()
586 pci_unmap_iospace(&pcie->pio); in tegra_pcie_free_resources()
592 struct tegra_pcie *pcie = pdev->bus->sysdata; in tegra_pcie_map_irq() local
599 irq = pcie->irq; in tegra_pcie_map_irq()
623 struct tegra_pcie *pcie = arg; in tegra_pcie_isr() local
624 struct device *dev = pcie->dev; in tegra_pcie_isr()
627 code = afi_readl(pcie, AFI_INTR_CODE) & AFI_INTR_CODE_MASK; in tegra_pcie_isr()
628 signature = afi_readl(pcie, AFI_INTR_SIGNATURE); in tegra_pcie_isr()
629 afi_writel(pcie, 0, AFI_INTR_CODE); in tegra_pcie_isr()
648 u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff; in tegra_pcie_isr()
668 static void tegra_pcie_setup_translations(struct tegra_pcie *pcie) in tegra_pcie_setup_translations() argument
673 size = resource_size(&pcie->cs); in tegra_pcie_setup_translations()
674 afi_writel(pcie, pcie->cs.start, AFI_AXI_BAR0_START); in tegra_pcie_setup_translations()
675 afi_writel(pcie, size >> 12, AFI_AXI_BAR0_SZ); in tegra_pcie_setup_translations()
679 size = resource_size(&pcie->io); in tegra_pcie_setup_translations()
680 axi_address = pcie->io.start; in tegra_pcie_setup_translations()
681 afi_writel(pcie, axi_address, AFI_AXI_BAR1_START); in tegra_pcie_setup_translations()
682 afi_writel(pcie, size >> 12, AFI_AXI_BAR1_SZ); in tegra_pcie_setup_translations()
683 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR1); in tegra_pcie_setup_translations()
686 fpci_bar = (((pcie->prefetch.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
687 size = resource_size(&pcie->prefetch); in tegra_pcie_setup_translations()
688 axi_address = pcie->prefetch.start; in tegra_pcie_setup_translations()
689 afi_writel(pcie, axi_address, AFI_AXI_BAR2_START); in tegra_pcie_setup_translations()
690 afi_writel(pcie, size >> 12, AFI_AXI_BAR2_SZ); in tegra_pcie_setup_translations()
691 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR2); in tegra_pcie_setup_translations()
694 fpci_bar = (((pcie->mem.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
695 size = resource_size(&pcie->mem); in tegra_pcie_setup_translations()
696 axi_address = pcie->mem.start; in tegra_pcie_setup_translations()
697 afi_writel(pcie, axi_address, AFI_AXI_BAR3_START); in tegra_pcie_setup_translations()
698 afi_writel(pcie, size >> 12, AFI_AXI_BAR3_SZ); in tegra_pcie_setup_translations()
699 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR3); in tegra_pcie_setup_translations()
702 afi_writel(pcie, 0, AFI_AXI_BAR4_START); in tegra_pcie_setup_translations()
703 afi_writel(pcie, 0, AFI_AXI_BAR4_SZ); in tegra_pcie_setup_translations()
704 afi_writel(pcie, 0, AFI_FPCI_BAR4); in tegra_pcie_setup_translations()
706 afi_writel(pcie, 0, AFI_AXI_BAR5_START); in tegra_pcie_setup_translations()
707 afi_writel(pcie, 0, AFI_AXI_BAR5_SZ); in tegra_pcie_setup_translations()
708 afi_writel(pcie, 0, AFI_FPCI_BAR5); in tegra_pcie_setup_translations()
711 afi_writel(pcie, 0, AFI_CACHE_BAR0_ST); in tegra_pcie_setup_translations()
712 afi_writel(pcie, 0, AFI_CACHE_BAR0_SZ); in tegra_pcie_setup_translations()
713 afi_writel(pcie, 0, AFI_CACHE_BAR1_ST); in tegra_pcie_setup_translations()
714 afi_writel(pcie, 0, AFI_CACHE_BAR1_SZ); in tegra_pcie_setup_translations()
717 afi_writel(pcie, 0, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_setup_translations()
718 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
719 afi_writel(pcie, 0, AFI_MSI_AXI_BAR_ST); in tegra_pcie_setup_translations()
720 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
723 static int tegra_pcie_pll_wait(struct tegra_pcie *pcie, unsigned long timeout) in tegra_pcie_pll_wait() argument
725 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pll_wait()
731 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_pll_wait()
739 static int tegra_pcie_phy_enable(struct tegra_pcie *pcie) in tegra_pcie_phy_enable() argument
741 struct device *dev = pcie->dev; in tegra_pcie_phy_enable()
742 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_enable()
747 pads_writel(pcie, 0x0, PADS_CTL_SEL); in tegra_pcie_phy_enable()
750 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
752 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
758 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
761 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
764 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
766 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
771 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
773 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
776 err = tegra_pcie_pll_wait(pcie, 500); in tegra_pcie_phy_enable()
783 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
785 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
788 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
790 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
795 static int tegra_pcie_phy_disable(struct tegra_pcie *pcie) in tegra_pcie_phy_disable() argument
797 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_disable()
801 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
803 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
806 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
808 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
811 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
813 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
822 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_on()
839 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_off()
855 static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) in tegra_pcie_phy_power_on() argument
857 struct device *dev = pcie->dev; in tegra_pcie_phy_power_on()
858 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_power_on()
862 if (pcie->legacy_phy) { in tegra_pcie_phy_power_on()
863 if (pcie->phy) in tegra_pcie_phy_power_on()
864 err = phy_power_on(pcie->phy); in tegra_pcie_phy_power_on()
866 err = tegra_pcie_phy_enable(pcie); in tegra_pcie_phy_power_on()
874 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_on()
885 pads_writel(pcie, soc->pads_refclk_cfg0, PADS_REFCLK_CFG0); in tegra_pcie_phy_power_on()
888 pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1); in tegra_pcie_phy_power_on()
893 static int tegra_pcie_phy_power_off(struct tegra_pcie *pcie) in tegra_pcie_phy_power_off() argument
895 struct device *dev = pcie->dev; in tegra_pcie_phy_power_off()
899 if (pcie->legacy_phy) { in tegra_pcie_phy_power_off()
900 if (pcie->phy) in tegra_pcie_phy_power_off()
901 err = phy_power_off(pcie->phy); in tegra_pcie_phy_power_off()
903 err = tegra_pcie_phy_disable(pcie); in tegra_pcie_phy_power_off()
911 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_off()
924 static int tegra_pcie_enable_controller(struct tegra_pcie *pcie) in tegra_pcie_enable_controller() argument
926 struct device *dev = pcie->dev; in tegra_pcie_enable_controller()
927 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_controller()
933 if (pcie->phy) { in tegra_pcie_enable_controller()
934 value = afi_readl(pcie, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
937 afi_writel(pcie, value, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
942 afi_writel(pcie, 0, AFI_PEXBIAS_CTRL_0); in tegra_pcie_enable_controller()
945 value = afi_readl(pcie, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
947 value |= AFI_PCIE_CONFIG_PCIE_DISABLE_ALL | pcie->xbar_config; in tegra_pcie_enable_controller()
949 list_for_each_entry(port, &pcie->ports, list) in tegra_pcie_enable_controller()
952 afi_writel(pcie, value, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
955 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
957 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
959 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
961 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
965 err = tegra_pcie_phy_power_on(pcie); in tegra_pcie_enable_controller()
973 reset_control_deassert(pcie->pcie_xrst); in tegra_pcie_enable_controller()
976 value = afi_readl(pcie, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
978 afi_writel(pcie, value, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
987 afi_writel(pcie, value, AFI_AFI_INTR_ENABLE); in tegra_pcie_enable_controller()
988 afi_writel(pcie, 0xffffffff, AFI_SM_INTR_ENABLE); in tegra_pcie_enable_controller()
991 afi_writel(pcie, AFI_INTR_MASK_INT_MASK, AFI_INTR_MASK); in tegra_pcie_enable_controller()
994 afi_writel(pcie, 0, AFI_FPCI_ERROR_MASKS); in tegra_pcie_enable_controller()
999 static void tegra_pcie_disable_controller(struct tegra_pcie *pcie) in tegra_pcie_disable_controller() argument
1003 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_disable_controller()
1005 if (pcie->soc->program_uphy) { in tegra_pcie_disable_controller()
1006 err = tegra_pcie_phy_power_off(pcie); in tegra_pcie_disable_controller()
1008 dev_err(pcie->dev, "failed to power off PHY(s): %d\n", in tegra_pcie_disable_controller()
1013 static void tegra_pcie_power_off(struct tegra_pcie *pcie) in tegra_pcie_power_off() argument
1015 struct device *dev = pcie->dev; in tegra_pcie_power_off()
1016 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_off()
1019 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_off()
1020 reset_control_assert(pcie->pex_rst); in tegra_pcie_power_off()
1022 clk_disable_unprepare(pcie->pll_e); in tegra_pcie_power_off()
1024 clk_disable_unprepare(pcie->cml_clk); in tegra_pcie_power_off()
1025 clk_disable_unprepare(pcie->afi_clk); in tegra_pcie_power_off()
1026 clk_disable_unprepare(pcie->pex_clk); in tegra_pcie_power_off()
1031 err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_off()
1036 static int tegra_pcie_power_on(struct tegra_pcie *pcie) in tegra_pcie_power_on() argument
1038 struct device *dev = pcie->dev; in tegra_pcie_power_on()
1039 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_on()
1042 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_power_on()
1043 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_on()
1044 reset_control_assert(pcie->pex_rst); in tegra_pcie_power_on()
1050 err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_on()
1055 err = clk_prepare_enable(pcie->pex_clk); in tegra_pcie_power_on()
1060 reset_control_deassert(pcie->pex_rst); in tegra_pcie_power_on()
1063 pcie->pex_clk, in tegra_pcie_power_on()
1064 pcie->pex_rst); in tegra_pcie_power_on()
1071 reset_control_deassert(pcie->afi_rst); in tegra_pcie_power_on()
1073 err = clk_prepare_enable(pcie->afi_clk); in tegra_pcie_power_on()
1080 err = clk_prepare_enable(pcie->cml_clk); in tegra_pcie_power_on()
1087 err = clk_prepare_enable(pcie->pll_e); in tegra_pcie_power_on()
1096 static int tegra_pcie_clocks_get(struct tegra_pcie *pcie) in tegra_pcie_clocks_get() argument
1098 struct device *dev = pcie->dev; in tegra_pcie_clocks_get()
1099 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_clocks_get()
1101 pcie->pex_clk = devm_clk_get(dev, "pex"); in tegra_pcie_clocks_get()
1102 if (IS_ERR(pcie->pex_clk)) in tegra_pcie_clocks_get()
1103 return PTR_ERR(pcie->pex_clk); in tegra_pcie_clocks_get()
1105 pcie->afi_clk = devm_clk_get(dev, "afi"); in tegra_pcie_clocks_get()
1106 if (IS_ERR(pcie->afi_clk)) in tegra_pcie_clocks_get()
1107 return PTR_ERR(pcie->afi_clk); in tegra_pcie_clocks_get()
1109 pcie->pll_e = devm_clk_get(dev, "pll_e"); in tegra_pcie_clocks_get()
1110 if (IS_ERR(pcie->pll_e)) in tegra_pcie_clocks_get()
1111 return PTR_ERR(pcie->pll_e); in tegra_pcie_clocks_get()
1114 pcie->cml_clk = devm_clk_get(dev, "cml"); in tegra_pcie_clocks_get()
1115 if (IS_ERR(pcie->cml_clk)) in tegra_pcie_clocks_get()
1116 return PTR_ERR(pcie->cml_clk); in tegra_pcie_clocks_get()
1122 static int tegra_pcie_resets_get(struct tegra_pcie *pcie) in tegra_pcie_resets_get() argument
1124 struct device *dev = pcie->dev; in tegra_pcie_resets_get()
1126 pcie->pex_rst = devm_reset_control_get_exclusive(dev, "pex"); in tegra_pcie_resets_get()
1127 if (IS_ERR(pcie->pex_rst)) in tegra_pcie_resets_get()
1128 return PTR_ERR(pcie->pex_rst); in tegra_pcie_resets_get()
1130 pcie->afi_rst = devm_reset_control_get_exclusive(dev, "afi"); in tegra_pcie_resets_get()
1131 if (IS_ERR(pcie->afi_rst)) in tegra_pcie_resets_get()
1132 return PTR_ERR(pcie->afi_rst); in tegra_pcie_resets_get()
1134 pcie->pcie_xrst = devm_reset_control_get_exclusive(dev, "pcie_x"); in tegra_pcie_resets_get()
1135 if (IS_ERR(pcie->pcie_xrst)) in tegra_pcie_resets_get()
1136 return PTR_ERR(pcie->pcie_xrst); in tegra_pcie_resets_get()
1141 static int tegra_pcie_phys_get_legacy(struct tegra_pcie *pcie) in tegra_pcie_phys_get_legacy() argument
1143 struct device *dev = pcie->dev; in tegra_pcie_phys_get_legacy()
1146 pcie->phy = devm_phy_optional_get(dev, "pcie"); in tegra_pcie_phys_get_legacy()
1147 if (IS_ERR(pcie->phy)) { in tegra_pcie_phys_get_legacy()
1148 err = PTR_ERR(pcie->phy); in tegra_pcie_phys_get_legacy()
1153 err = phy_init(pcie->phy); in tegra_pcie_phys_get_legacy()
1159 pcie->legacy_phy = true; in tegra_pcie_phys_get_legacy()
1187 struct device *dev = port->pcie->dev; in tegra_pcie_port_get_phys()
1217 static int tegra_pcie_phys_get(struct tegra_pcie *pcie) in tegra_pcie_phys_get() argument
1219 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phys_get()
1220 struct device_node *np = pcie->dev->of_node; in tegra_pcie_phys_get()
1225 return tegra_pcie_phys_get_legacy(pcie); in tegra_pcie_phys_get()
1227 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_get()
1236 static void tegra_pcie_phys_put(struct tegra_pcie *pcie) in tegra_pcie_phys_put() argument
1239 struct device *dev = pcie->dev; in tegra_pcie_phys_put()
1242 if (pcie->legacy_phy) { in tegra_pcie_phys_put()
1243 err = phy_exit(pcie->phy); in tegra_pcie_phys_put()
1249 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_put()
1260 static int tegra_pcie_get_resources(struct tegra_pcie *pcie) in tegra_pcie_get_resources() argument
1262 struct device *dev = pcie->dev; in tegra_pcie_get_resources()
1265 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_get_resources()
1268 err = tegra_pcie_clocks_get(pcie); in tegra_pcie_get_resources()
1274 err = tegra_pcie_resets_get(pcie); in tegra_pcie_get_resources()
1281 err = tegra_pcie_phys_get(pcie); in tegra_pcie_get_resources()
1289 pcie->pads = devm_ioremap_resource(dev, pads); in tegra_pcie_get_resources()
1290 if (IS_ERR(pcie->pads)) { in tegra_pcie_get_resources()
1291 err = PTR_ERR(pcie->pads); in tegra_pcie_get_resources()
1296 pcie->afi = devm_ioremap_resource(dev, afi); in tegra_pcie_get_resources()
1297 if (IS_ERR(pcie->afi)) { in tegra_pcie_get_resources()
1298 err = PTR_ERR(pcie->afi); in tegra_pcie_get_resources()
1309 pcie->cs = *res; in tegra_pcie_get_resources()
1312 pcie->cs.end = pcie->cs.start + SZ_4K - 1; in tegra_pcie_get_resources()
1314 pcie->cfg = devm_ioremap_resource(dev, &pcie->cs); in tegra_pcie_get_resources()
1315 if (IS_ERR(pcie->cfg)) { in tegra_pcie_get_resources()
1316 err = PTR_ERR(pcie->cfg); in tegra_pcie_get_resources()
1327 pcie->irq = err; in tegra_pcie_get_resources()
1329 err = request_irq(pcie->irq, tegra_pcie_isr, IRQF_SHARED, "PCIE", pcie); in tegra_pcie_get_resources()
1339 tegra_pcie_phys_put(pcie); in tegra_pcie_get_resources()
1343 static int tegra_pcie_put_resources(struct tegra_pcie *pcie) in tegra_pcie_put_resources() argument
1345 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_put_resources()
1347 if (pcie->irq > 0) in tegra_pcie_put_resources()
1348 free_irq(pcie->irq, pcie); in tegra_pcie_put_resources()
1351 tegra_pcie_phys_put(pcie); in tegra_pcie_put_resources()
1358 struct tegra_pcie *pcie = port->pcie; in tegra_pcie_pme_turnoff() local
1359 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pme_turnoff()
1364 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1366 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1369 err = readl_poll_timeout(pcie->afi + AFI_PCIE_PME, val, in tegra_pcie_pme_turnoff()
1372 dev_err(pcie->dev, "PME Ack is not received on port: %d\n", in tegra_pcie_pme_turnoff()
1377 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1379 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1415 struct tegra_pcie *pcie = data; in tegra_pcie_msi_irq() local
1416 struct device *dev = pcie->dev; in tegra_pcie_msi_irq()
1417 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_irq()
1421 unsigned long reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1429 afi_writel(pcie, 1 << offset, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1446 reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1518 static int tegra_pcie_msi_setup(struct tegra_pcie *pcie) in tegra_pcie_msi_setup() argument
1520 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_msi_setup()
1521 struct platform_device *pdev = to_platform_device(pcie->dev); in tegra_pcie_msi_setup()
1522 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_setup()
1523 struct device *dev = pcie->dev; in tegra_pcie_msi_setup()
1548 tegra_msi_irq_chip.name, pcie); in tegra_pcie_msi_setup()
1566 static void tegra_pcie_enable_msi(struct tegra_pcie *pcie) in tegra_pcie_enable_msi() argument
1568 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_msi()
1569 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_enable_msi()
1572 afi_writel(pcie, msi->phys >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_enable_msi()
1573 afi_writel(pcie, msi->phys, AFI_MSI_AXI_BAR_ST); in tegra_pcie_enable_msi()
1575 afi_writel(pcie, 1, AFI_MSI_BAR_SZ); in tegra_pcie_enable_msi()
1578 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC0); in tegra_pcie_enable_msi()
1579 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC1); in tegra_pcie_enable_msi()
1580 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC2); in tegra_pcie_enable_msi()
1581 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC3); in tegra_pcie_enable_msi()
1582 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC4); in tegra_pcie_enable_msi()
1583 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC5); in tegra_pcie_enable_msi()
1584 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC6); in tegra_pcie_enable_msi()
1585 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC7); in tegra_pcie_enable_msi()
1588 reg = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1590 afi_writel(pcie, reg, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1593 static void tegra_pcie_msi_teardown(struct tegra_pcie *pcie) in tegra_pcie_msi_teardown() argument
1595 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_teardown()
1601 free_irq(msi->irq, pcie); in tegra_pcie_msi_teardown()
1612 static int tegra_pcie_disable_msi(struct tegra_pcie *pcie) in tegra_pcie_disable_msi() argument
1617 value = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1619 afi_writel(pcie, value, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1622 afi_writel(pcie, 0, AFI_MSI_EN_VEC0); in tegra_pcie_disable_msi()
1623 afi_writel(pcie, 0, AFI_MSI_EN_VEC1); in tegra_pcie_disable_msi()
1624 afi_writel(pcie, 0, AFI_MSI_EN_VEC2); in tegra_pcie_disable_msi()
1625 afi_writel(pcie, 0, AFI_MSI_EN_VEC3); in tegra_pcie_disable_msi()
1626 afi_writel(pcie, 0, AFI_MSI_EN_VEC4); in tegra_pcie_disable_msi()
1627 afi_writel(pcie, 0, AFI_MSI_EN_VEC5); in tegra_pcie_disable_msi()
1628 afi_writel(pcie, 0, AFI_MSI_EN_VEC6); in tegra_pcie_disable_msi()
1629 afi_writel(pcie, 0, AFI_MSI_EN_VEC7); in tegra_pcie_disable_msi()
1634 static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes, in tegra_pcie_get_xbar_config() argument
1637 struct device *dev = pcie->dev; in tegra_pcie_get_xbar_config()
1740 static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie) in tegra_pcie_get_legacy_regulators() argument
1742 struct device *dev = pcie->dev; in tegra_pcie_get_legacy_regulators()
1746 pcie->num_supplies = 3; in tegra_pcie_get_legacy_regulators()
1748 pcie->num_supplies = 2; in tegra_pcie_get_legacy_regulators()
1750 if (pcie->num_supplies == 0) { in tegra_pcie_get_legacy_regulators()
1755 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_legacy_regulators()
1756 sizeof(*pcie->supplies), in tegra_pcie_get_legacy_regulators()
1758 if (!pcie->supplies) in tegra_pcie_get_legacy_regulators()
1761 pcie->supplies[0].supply = "pex-clk"; in tegra_pcie_get_legacy_regulators()
1762 pcie->supplies[1].supply = "vdd"; in tegra_pcie_get_legacy_regulators()
1764 if (pcie->num_supplies > 2) in tegra_pcie_get_legacy_regulators()
1765 pcie->supplies[2].supply = "avdd"; in tegra_pcie_get_legacy_regulators()
1767 return devm_regulator_bulk_get(dev, pcie->num_supplies, pcie->supplies); in tegra_pcie_get_legacy_regulators()
1779 static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask) in tegra_pcie_get_regulators() argument
1781 struct device *dev = pcie->dev; in tegra_pcie_get_regulators()
1786 pcie->num_supplies = 4; in tegra_pcie_get_regulators()
1788 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1789 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1791 if (!pcie->supplies) in tegra_pcie_get_regulators()
1794 pcie->supplies[i++].supply = "dvdd-pex"; in tegra_pcie_get_regulators()
1795 pcie->supplies[i++].supply = "hvdd-pex-pll"; in tegra_pcie_get_regulators()
1796 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1797 pcie->supplies[i++].supply = "vddio-pexctl-aud"; in tegra_pcie_get_regulators()
1799 pcie->num_supplies = 6; in tegra_pcie_get_regulators()
1801 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1802 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1804 if (!pcie->supplies) in tegra_pcie_get_regulators()
1807 pcie->supplies[i++].supply = "avdd-pll-uerefe"; in tegra_pcie_get_regulators()
1808 pcie->supplies[i++].supply = "hvddio-pex"; in tegra_pcie_get_regulators()
1809 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
1810 pcie->supplies[i++].supply = "dvdd-pex-pll"; in tegra_pcie_get_regulators()
1811 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
1812 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1814 pcie->num_supplies = 7; in tegra_pcie_get_regulators()
1816 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1817 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1819 if (!pcie->supplies) in tegra_pcie_get_regulators()
1822 pcie->supplies[i++].supply = "avddio-pex"; in tegra_pcie_get_regulators()
1823 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
1824 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1825 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1826 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
1827 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1828 pcie->supplies[i++].supply = "avdd-pll-erefe"; in tegra_pcie_get_regulators()
1840 pcie->num_supplies = 4 + (need_pexa ? 2 : 0) + in tegra_pcie_get_regulators()
1843 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1844 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1846 if (!pcie->supplies) in tegra_pcie_get_regulators()
1849 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1850 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
1851 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
1852 pcie->supplies[i++].supply = "avdd-plle"; in tegra_pcie_get_regulators()
1855 pcie->supplies[i++].supply = "avdd-pexa"; in tegra_pcie_get_regulators()
1856 pcie->supplies[i++].supply = "vdd-pexa"; in tegra_pcie_get_regulators()
1860 pcie->supplies[i++].supply = "avdd-pexb"; in tegra_pcie_get_regulators()
1861 pcie->supplies[i++].supply = "vdd-pexb"; in tegra_pcie_get_regulators()
1864 pcie->num_supplies = 5; in tegra_pcie_get_regulators()
1866 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1867 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
1869 if (!pcie->supplies) in tegra_pcie_get_regulators()
1872 pcie->supplies[0].supply = "avdd-pex"; in tegra_pcie_get_regulators()
1873 pcie->supplies[1].supply = "vdd-pex"; in tegra_pcie_get_regulators()
1874 pcie->supplies[2].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
1875 pcie->supplies[3].supply = "avdd-plle"; in tegra_pcie_get_regulators()
1876 pcie->supplies[4].supply = "vddio-pex-clk"; in tegra_pcie_get_regulators()
1879 if (of_regulator_bulk_available(dev->of_node, pcie->supplies, in tegra_pcie_get_regulators()
1880 pcie->num_supplies)) in tegra_pcie_get_regulators()
1881 return devm_regulator_bulk_get(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
1882 pcie->supplies); in tegra_pcie_get_regulators()
1891 devm_kfree(dev, pcie->supplies); in tegra_pcie_get_regulators()
1892 pcie->num_supplies = 0; in tegra_pcie_get_regulators()
1894 return tegra_pcie_get_legacy_regulators(pcie); in tegra_pcie_get_regulators()
1897 static int tegra_pcie_parse_dt(struct tegra_pcie *pcie) in tegra_pcie_parse_dt() argument
1899 struct device *dev = pcie->dev; in tegra_pcie_parse_dt()
1901 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_parse_dt()
1922 pcie->offset.io = res.start - range.pci_addr; in tegra_pcie_parse_dt()
1924 memcpy(&pcie->pio, &res, sizeof(res)); in tegra_pcie_parse_dt()
1925 pcie->pio.name = np->full_name; in tegra_pcie_parse_dt()
1935 pcie->io.start = range.cpu_addr; in tegra_pcie_parse_dt()
1936 pcie->io.end = range.cpu_addr + range.size - 1; in tegra_pcie_parse_dt()
1937 pcie->io.flags = IORESOURCE_MEM; in tegra_pcie_parse_dt()
1938 pcie->io.name = "I/O"; in tegra_pcie_parse_dt()
1940 memcpy(&res, &pcie->io, sizeof(res)); in tegra_pcie_parse_dt()
1950 pcie->offset.mem = res.start - range.pci_addr; in tegra_pcie_parse_dt()
1953 memcpy(&pcie->prefetch, &res, sizeof(res)); in tegra_pcie_parse_dt()
1954 pcie->prefetch.name = "prefetchable"; in tegra_pcie_parse_dt()
1956 memcpy(&pcie->mem, &res, sizeof(res)); in tegra_pcie_parse_dt()
1957 pcie->mem.name = "non-prefetchable"; in tegra_pcie_parse_dt()
1963 err = of_pci_parse_bus_range(np, &pcie->busn); in tegra_pcie_parse_dt()
1966 pcie->busn.name = np->name; in tegra_pcie_parse_dt()
1967 pcie->busn.start = 0; in tegra_pcie_parse_dt()
1968 pcie->busn.end = 0xff; in tegra_pcie_parse_dt()
1969 pcie->busn.flags = IORESOURCE_BUS; in tegra_pcie_parse_dt()
2032 rp->pcie = pcie; in tegra_pcie_parse_dt()
2039 list_add_tail(&rp->list, &pcie->ports); in tegra_pcie_parse_dt()
2042 err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config); in tegra_pcie_parse_dt()
2048 err = tegra_pcie_get_regulators(pcie, mask); in tegra_pcie_parse_dt()
2067 struct device *dev = port->pcie->dev; in tegra_pcie_port_check_link()
2112 static void tegra_pcie_enable_ports(struct tegra_pcie *pcie) in tegra_pcie_enable_ports() argument
2114 struct device *dev = pcie->dev; in tegra_pcie_enable_ports()
2117 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in tegra_pcie_enable_ports()
2133 static void tegra_pcie_disable_ports(struct tegra_pcie *pcie) in tegra_pcie_disable_ports() argument
2137 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_disable_ports()
2252 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_start() local
2254 if (list_empty(&pcie->ports)) in tegra_pcie_ports_seq_start()
2259 return seq_list_start(&pcie->ports, *pos); in tegra_pcie_ports_seq_start()
2264 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_next() local
2266 return seq_list_next(v, &pcie->ports, pos); in tegra_pcie_ports_seq_next()
2316 struct tegra_pcie *pcie = inode->i_private; in tegra_pcie_ports_open() local
2325 s->private = pcie; in tegra_pcie_ports_open()
2338 static void tegra_pcie_debugfs_exit(struct tegra_pcie *pcie) in tegra_pcie_debugfs_exit() argument
2340 debugfs_remove_recursive(pcie->debugfs); in tegra_pcie_debugfs_exit()
2341 pcie->debugfs = NULL; in tegra_pcie_debugfs_exit()
2344 static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie) in tegra_pcie_debugfs_init() argument
2348 pcie->debugfs = debugfs_create_dir("pcie", NULL); in tegra_pcie_debugfs_init()
2349 if (!pcie->debugfs) in tegra_pcie_debugfs_init()
2352 file = debugfs_create_file("ports", S_IFREG | S_IRUGO, pcie->debugfs, in tegra_pcie_debugfs_init()
2353 pcie, &tegra_pcie_ports_ops); in tegra_pcie_debugfs_init()
2360 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_debugfs_init()
2368 struct tegra_pcie *pcie; in tegra_pcie_probe() local
2372 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in tegra_pcie_probe()
2376 pcie = pci_host_bridge_priv(host); in tegra_pcie_probe()
2377 host->sysdata = pcie; in tegra_pcie_probe()
2378 platform_set_drvdata(pdev, pcie); in tegra_pcie_probe()
2380 pcie->soc = of_device_get_match_data(dev); in tegra_pcie_probe()
2381 INIT_LIST_HEAD(&pcie->ports); in tegra_pcie_probe()
2382 pcie->dev = dev; in tegra_pcie_probe()
2384 err = tegra_pcie_parse_dt(pcie); in tegra_pcie_probe()
2388 err = tegra_pcie_get_resources(pcie); in tegra_pcie_probe()
2394 err = tegra_pcie_msi_setup(pcie); in tegra_pcie_probe()
2400 pm_runtime_enable(pcie->dev); in tegra_pcie_probe()
2401 err = pm_runtime_get_sync(pcie->dev); in tegra_pcie_probe()
2407 err = tegra_pcie_request_resources(pcie); in tegra_pcie_probe()
2411 host->busnr = pcie->busn.start; in tegra_pcie_probe()
2432 err = tegra_pcie_debugfs_init(pcie); in tegra_pcie_probe()
2440 tegra_pcie_free_resources(pcie); in tegra_pcie_probe()
2442 pm_runtime_put_sync(pcie->dev); in tegra_pcie_probe()
2443 pm_runtime_disable(pcie->dev); in tegra_pcie_probe()
2444 tegra_pcie_msi_teardown(pcie); in tegra_pcie_probe()
2446 tegra_pcie_put_resources(pcie); in tegra_pcie_probe()
2452 struct tegra_pcie *pcie = platform_get_drvdata(pdev); in tegra_pcie_remove() local
2453 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_remove()
2457 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_remove()
2461 tegra_pcie_free_resources(pcie); in tegra_pcie_remove()
2462 pm_runtime_put_sync(pcie->dev); in tegra_pcie_remove()
2463 pm_runtime_disable(pcie->dev); in tegra_pcie_remove()
2466 tegra_pcie_msi_teardown(pcie); in tegra_pcie_remove()
2468 tegra_pcie_put_resources(pcie); in tegra_pcie_remove()
2470 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_remove()
2478 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_suspend() local
2481 list_for_each_entry(port, &pcie->ports, list) in tegra_pcie_pm_suspend()
2484 tegra_pcie_disable_ports(pcie); in tegra_pcie_pm_suspend()
2487 tegra_pcie_disable_msi(pcie); in tegra_pcie_pm_suspend()
2489 tegra_pcie_disable_controller(pcie); in tegra_pcie_pm_suspend()
2490 tegra_pcie_power_off(pcie); in tegra_pcie_pm_suspend()
2497 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_resume() local
2500 err = tegra_pcie_power_on(pcie); in tegra_pcie_pm_resume()
2505 err = tegra_pcie_enable_controller(pcie); in tegra_pcie_pm_resume()
2510 tegra_pcie_setup_translations(pcie); in tegra_pcie_pm_resume()
2513 tegra_pcie_enable_msi(pcie); in tegra_pcie_pm_resume()
2515 tegra_pcie_enable_ports(pcie); in tegra_pcie_pm_resume()
2520 tegra_pcie_power_off(pcie); in tegra_pcie_pm_resume()