Lines Matching refs:pcie
394 struct tegra_pcie *pcie; member
412 static inline void afi_writel(struct tegra_pcie *pcie, u32 value, in afi_writel() argument
415 writel(value, pcie->afi + offset); in afi_writel()
418 static inline u32 afi_readl(struct tegra_pcie *pcie, unsigned long offset) in afi_readl() argument
420 return readl(pcie->afi + offset); in afi_readl()
423 static inline void pads_writel(struct tegra_pcie *pcie, u32 value, in pads_writel() argument
426 writel(value, pcie->pads + offset); in pads_writel()
429 static inline u32 pads_readl(struct tegra_pcie *pcie, unsigned long offset) in pads_readl() argument
431 return readl(pcie->pads + offset); in pads_readl()
466 struct tegra_pcie *pcie = bus->sysdata; in tegra_pcie_map_bus() local
473 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_map_bus()
487 afi_writel(pcie, base, AFI_FPCI_BAR0); in tegra_pcie_map_bus()
490 addr = pcie->cfg + (offset & (SZ_4K - 1)); in tegra_pcie_map_bus()
524 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_port_get_pex_ctrl()
553 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_reset()
555 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_reset()
563 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_reset()
565 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_reset()
571 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_enable_rp_features()
609 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_program_ectl_settings()
657 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_apply_sw_fixup()
711 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_port_enable()
715 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_enable()
723 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_enable()
744 const struct tegra_pcie_soc *soc = port->pcie->soc; in tegra_pcie_port_disable()
748 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_disable()
750 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_disable()
753 value = afi_readl(port->pcie, ctrl); in tegra_pcie_port_disable()
759 afi_writel(port->pcie, value, ctrl); in tegra_pcie_port_disable()
762 value = afi_readl(port->pcie, AFI_PCIE_CONFIG); in tegra_pcie_port_disable()
765 afi_writel(port->pcie, value, AFI_PCIE_CONFIG); in tegra_pcie_port_disable()
770 struct tegra_pcie *pcie = port->pcie; in tegra_pcie_port_free() local
771 struct device *dev = pcie->dev; in tegra_pcie_port_free()
800 static int tegra_pcie_request_resources(struct tegra_pcie *pcie) in tegra_pcie_request_resources() argument
802 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_request_resources()
804 struct device *dev = pcie->dev; in tegra_pcie_request_resources()
807 pci_add_resource_offset(windows, &pcie->pio, pcie->offset.io); in tegra_pcie_request_resources()
808 pci_add_resource_offset(windows, &pcie->mem, pcie->offset.mem); in tegra_pcie_request_resources()
809 pci_add_resource_offset(windows, &pcie->prefetch, pcie->offset.mem); in tegra_pcie_request_resources()
810 pci_add_resource(windows, &pcie->busn); in tegra_pcie_request_resources()
818 pci_remap_iospace(&pcie->pio, pcie->io.start); in tegra_pcie_request_resources()
823 static void tegra_pcie_free_resources(struct tegra_pcie *pcie) in tegra_pcie_free_resources() argument
825 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_free_resources()
828 pci_unmap_iospace(&pcie->pio); in tegra_pcie_free_resources()
834 struct tegra_pcie *pcie = pdev->bus->sysdata; in tegra_pcie_map_irq() local
841 irq = pcie->irq; in tegra_pcie_map_irq()
865 struct tegra_pcie *pcie = arg; in tegra_pcie_isr() local
866 struct device *dev = pcie->dev; in tegra_pcie_isr()
869 code = afi_readl(pcie, AFI_INTR_CODE) & AFI_INTR_CODE_MASK; in tegra_pcie_isr()
870 signature = afi_readl(pcie, AFI_INTR_SIGNATURE); in tegra_pcie_isr()
871 afi_writel(pcie, 0, AFI_INTR_CODE); in tegra_pcie_isr()
890 u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff; in tegra_pcie_isr()
910 static void tegra_pcie_setup_translations(struct tegra_pcie *pcie) in tegra_pcie_setup_translations() argument
915 size = resource_size(&pcie->cs); in tegra_pcie_setup_translations()
916 afi_writel(pcie, pcie->cs.start, AFI_AXI_BAR0_START); in tegra_pcie_setup_translations()
917 afi_writel(pcie, size >> 12, AFI_AXI_BAR0_SZ); in tegra_pcie_setup_translations()
921 size = resource_size(&pcie->io); in tegra_pcie_setup_translations()
922 axi_address = pcie->io.start; in tegra_pcie_setup_translations()
923 afi_writel(pcie, axi_address, AFI_AXI_BAR1_START); in tegra_pcie_setup_translations()
924 afi_writel(pcie, size >> 12, AFI_AXI_BAR1_SZ); in tegra_pcie_setup_translations()
925 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR1); in tegra_pcie_setup_translations()
928 fpci_bar = (((pcie->prefetch.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
929 size = resource_size(&pcie->prefetch); in tegra_pcie_setup_translations()
930 axi_address = pcie->prefetch.start; in tegra_pcie_setup_translations()
931 afi_writel(pcie, axi_address, AFI_AXI_BAR2_START); in tegra_pcie_setup_translations()
932 afi_writel(pcie, size >> 12, AFI_AXI_BAR2_SZ); in tegra_pcie_setup_translations()
933 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR2); in tegra_pcie_setup_translations()
936 fpci_bar = (((pcie->mem.start >> 12) & 0x0fffffff) << 4) | 0x1; in tegra_pcie_setup_translations()
937 size = resource_size(&pcie->mem); in tegra_pcie_setup_translations()
938 axi_address = pcie->mem.start; in tegra_pcie_setup_translations()
939 afi_writel(pcie, axi_address, AFI_AXI_BAR3_START); in tegra_pcie_setup_translations()
940 afi_writel(pcie, size >> 12, AFI_AXI_BAR3_SZ); in tegra_pcie_setup_translations()
941 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR3); in tegra_pcie_setup_translations()
944 afi_writel(pcie, 0, AFI_AXI_BAR4_START); in tegra_pcie_setup_translations()
945 afi_writel(pcie, 0, AFI_AXI_BAR4_SZ); in tegra_pcie_setup_translations()
946 afi_writel(pcie, 0, AFI_FPCI_BAR4); in tegra_pcie_setup_translations()
948 afi_writel(pcie, 0, AFI_AXI_BAR5_START); in tegra_pcie_setup_translations()
949 afi_writel(pcie, 0, AFI_AXI_BAR5_SZ); in tegra_pcie_setup_translations()
950 afi_writel(pcie, 0, AFI_FPCI_BAR5); in tegra_pcie_setup_translations()
952 if (pcie->soc->has_cache_bars) { in tegra_pcie_setup_translations()
954 afi_writel(pcie, 0, AFI_CACHE_BAR0_ST); in tegra_pcie_setup_translations()
955 afi_writel(pcie, 0, AFI_CACHE_BAR0_SZ); in tegra_pcie_setup_translations()
956 afi_writel(pcie, 0, AFI_CACHE_BAR1_ST); in tegra_pcie_setup_translations()
957 afi_writel(pcie, 0, AFI_CACHE_BAR1_SZ); in tegra_pcie_setup_translations()
961 afi_writel(pcie, 0, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_setup_translations()
962 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
963 afi_writel(pcie, 0, AFI_MSI_AXI_BAR_ST); in tegra_pcie_setup_translations()
964 afi_writel(pcie, 0, AFI_MSI_BAR_SZ); in tegra_pcie_setup_translations()
967 static int tegra_pcie_pll_wait(struct tegra_pcie *pcie, unsigned long timeout) in tegra_pcie_pll_wait() argument
969 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pll_wait()
975 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_pll_wait()
983 static int tegra_pcie_phy_enable(struct tegra_pcie *pcie) in tegra_pcie_phy_enable() argument
985 struct device *dev = pcie->dev; in tegra_pcie_phy_enable()
986 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_enable()
991 pads_writel(pcie, 0x0, PADS_CTL_SEL); in tegra_pcie_phy_enable()
994 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
996 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
1002 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1005 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1008 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1010 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1015 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1017 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_enable()
1020 err = tegra_pcie_pll_wait(pcie, 500); in tegra_pcie_phy_enable()
1027 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
1029 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
1032 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_enable()
1034 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_enable()
1039 static int tegra_pcie_phy_disable(struct tegra_pcie *pcie) in tegra_pcie_phy_disable() argument
1041 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phy_disable()
1045 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
1047 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
1050 value = pads_readl(pcie, PADS_CTL); in tegra_pcie_phy_disable()
1052 pads_writel(pcie, value, PADS_CTL); in tegra_pcie_phy_disable()
1055 value = pads_readl(pcie, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
1057 pads_writel(pcie, value, soc->pads_pll_ctl); in tegra_pcie_phy_disable()
1066 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_on()
1083 struct device *dev = port->pcie->dev; in tegra_pcie_port_phy_power_off()
1099 static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) in tegra_pcie_phy_power_on() argument
1101 struct device *dev = pcie->dev; in tegra_pcie_phy_power_on()
1105 if (pcie->legacy_phy) { in tegra_pcie_phy_power_on()
1106 if (pcie->phy) in tegra_pcie_phy_power_on()
1107 err = phy_power_on(pcie->phy); in tegra_pcie_phy_power_on()
1109 err = tegra_pcie_phy_enable(pcie); in tegra_pcie_phy_power_on()
1117 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_on()
1130 static int tegra_pcie_phy_power_off(struct tegra_pcie *pcie) in tegra_pcie_phy_power_off() argument
1132 struct device *dev = pcie->dev; in tegra_pcie_phy_power_off()
1136 if (pcie->legacy_phy) { in tegra_pcie_phy_power_off()
1137 if (pcie->phy) in tegra_pcie_phy_power_off()
1138 err = phy_power_off(pcie->phy); in tegra_pcie_phy_power_off()
1140 err = tegra_pcie_phy_disable(pcie); in tegra_pcie_phy_power_off()
1148 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phy_power_off()
1161 static void tegra_pcie_enable_controller(struct tegra_pcie *pcie) in tegra_pcie_enable_controller() argument
1163 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_controller()
1168 if (pcie->phy) { in tegra_pcie_enable_controller()
1169 value = afi_readl(pcie, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
1172 afi_writel(pcie, value, AFI_PLLE_CONTROL); in tegra_pcie_enable_controller()
1177 afi_writel(pcie, 0, AFI_PEXBIAS_CTRL_0); in tegra_pcie_enable_controller()
1180 value = afi_readl(pcie, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
1182 value |= AFI_PCIE_CONFIG_PCIE_DISABLE_ALL | pcie->xbar_config; in tegra_pcie_enable_controller()
1185 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_enable_controller()
1190 afi_writel(pcie, value, AFI_PCIE_CONFIG); in tegra_pcie_enable_controller()
1193 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
1195 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
1197 value = afi_readl(pcie, AFI_FUSE); in tegra_pcie_enable_controller()
1199 afi_writel(pcie, value, AFI_FUSE); in tegra_pcie_enable_controller()
1203 value = afi_readl(pcie, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
1206 afi_writel(pcie, value, AFI_CONFIGURATION); in tegra_pcie_enable_controller()
1215 afi_writel(pcie, value, AFI_AFI_INTR_ENABLE); in tegra_pcie_enable_controller()
1216 afi_writel(pcie, 0xffffffff, AFI_SM_INTR_ENABLE); in tegra_pcie_enable_controller()
1219 afi_writel(pcie, AFI_INTR_MASK_INT_MASK, AFI_INTR_MASK); in tegra_pcie_enable_controller()
1222 afi_writel(pcie, 0, AFI_FPCI_ERROR_MASKS); in tegra_pcie_enable_controller()
1225 static void tegra_pcie_power_off(struct tegra_pcie *pcie) in tegra_pcie_power_off() argument
1227 struct device *dev = pcie->dev; in tegra_pcie_power_off()
1228 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_off()
1231 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_off()
1233 clk_disable_unprepare(pcie->pll_e); in tegra_pcie_power_off()
1235 clk_disable_unprepare(pcie->cml_clk); in tegra_pcie_power_off()
1236 clk_disable_unprepare(pcie->afi_clk); in tegra_pcie_power_off()
1241 err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_off()
1246 static int tegra_pcie_power_on(struct tegra_pcie *pcie) in tegra_pcie_power_on() argument
1248 struct device *dev = pcie->dev; in tegra_pcie_power_on()
1249 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_power_on()
1252 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_power_on()
1253 reset_control_assert(pcie->afi_rst); in tegra_pcie_power_on()
1254 reset_control_assert(pcie->pex_rst); in tegra_pcie_power_on()
1260 err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_on()
1277 err = clk_prepare_enable(pcie->afi_clk); in tegra_pcie_power_on()
1284 err = clk_prepare_enable(pcie->cml_clk); in tegra_pcie_power_on()
1291 err = clk_prepare_enable(pcie->pll_e); in tegra_pcie_power_on()
1297 reset_control_deassert(pcie->afi_rst); in tegra_pcie_power_on()
1303 clk_disable_unprepare(pcie->cml_clk); in tegra_pcie_power_on()
1305 clk_disable_unprepare(pcie->afi_clk); in tegra_pcie_power_on()
1310 regulator_bulk_disable(pcie->num_supplies, pcie->supplies); in tegra_pcie_power_on()
1315 static void tegra_pcie_apply_pad_settings(struct tegra_pcie *pcie) in tegra_pcie_apply_pad_settings() argument
1317 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_apply_pad_settings()
1320 pads_writel(pcie, soc->pads_refclk_cfg0, PADS_REFCLK_CFG0); in tegra_pcie_apply_pad_settings()
1323 pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1); in tegra_pcie_apply_pad_settings()
1326 static int tegra_pcie_clocks_get(struct tegra_pcie *pcie) in tegra_pcie_clocks_get() argument
1328 struct device *dev = pcie->dev; in tegra_pcie_clocks_get()
1329 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_clocks_get()
1331 pcie->pex_clk = devm_clk_get(dev, "pex"); in tegra_pcie_clocks_get()
1332 if (IS_ERR(pcie->pex_clk)) in tegra_pcie_clocks_get()
1333 return PTR_ERR(pcie->pex_clk); in tegra_pcie_clocks_get()
1335 pcie->afi_clk = devm_clk_get(dev, "afi"); in tegra_pcie_clocks_get()
1336 if (IS_ERR(pcie->afi_clk)) in tegra_pcie_clocks_get()
1337 return PTR_ERR(pcie->afi_clk); in tegra_pcie_clocks_get()
1339 pcie->pll_e = devm_clk_get(dev, "pll_e"); in tegra_pcie_clocks_get()
1340 if (IS_ERR(pcie->pll_e)) in tegra_pcie_clocks_get()
1341 return PTR_ERR(pcie->pll_e); in tegra_pcie_clocks_get()
1344 pcie->cml_clk = devm_clk_get(dev, "cml"); in tegra_pcie_clocks_get()
1345 if (IS_ERR(pcie->cml_clk)) in tegra_pcie_clocks_get()
1346 return PTR_ERR(pcie->cml_clk); in tegra_pcie_clocks_get()
1352 static int tegra_pcie_resets_get(struct tegra_pcie *pcie) in tegra_pcie_resets_get() argument
1354 struct device *dev = pcie->dev; in tegra_pcie_resets_get()
1356 pcie->pex_rst = devm_reset_control_get_exclusive(dev, "pex"); in tegra_pcie_resets_get()
1357 if (IS_ERR(pcie->pex_rst)) in tegra_pcie_resets_get()
1358 return PTR_ERR(pcie->pex_rst); in tegra_pcie_resets_get()
1360 pcie->afi_rst = devm_reset_control_get_exclusive(dev, "afi"); in tegra_pcie_resets_get()
1361 if (IS_ERR(pcie->afi_rst)) in tegra_pcie_resets_get()
1362 return PTR_ERR(pcie->afi_rst); in tegra_pcie_resets_get()
1364 pcie->pcie_xrst = devm_reset_control_get_exclusive(dev, "pcie_x"); in tegra_pcie_resets_get()
1365 if (IS_ERR(pcie->pcie_xrst)) in tegra_pcie_resets_get()
1366 return PTR_ERR(pcie->pcie_xrst); in tegra_pcie_resets_get()
1371 static int tegra_pcie_phys_get_legacy(struct tegra_pcie *pcie) in tegra_pcie_phys_get_legacy() argument
1373 struct device *dev = pcie->dev; in tegra_pcie_phys_get_legacy()
1376 pcie->phy = devm_phy_optional_get(dev, "pcie"); in tegra_pcie_phys_get_legacy()
1377 if (IS_ERR(pcie->phy)) { in tegra_pcie_phys_get_legacy()
1378 err = PTR_ERR(pcie->phy); in tegra_pcie_phys_get_legacy()
1383 err = phy_init(pcie->phy); in tegra_pcie_phys_get_legacy()
1389 pcie->legacy_phy = true; in tegra_pcie_phys_get_legacy()
1417 struct device *dev = port->pcie->dev; in tegra_pcie_port_get_phys()
1447 static int tegra_pcie_phys_get(struct tegra_pcie *pcie) in tegra_pcie_phys_get() argument
1449 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_phys_get()
1450 struct device_node *np = pcie->dev->of_node; in tegra_pcie_phys_get()
1455 return tegra_pcie_phys_get_legacy(pcie); in tegra_pcie_phys_get()
1457 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_get()
1466 static void tegra_pcie_phys_put(struct tegra_pcie *pcie) in tegra_pcie_phys_put() argument
1469 struct device *dev = pcie->dev; in tegra_pcie_phys_put()
1472 if (pcie->legacy_phy) { in tegra_pcie_phys_put()
1473 err = phy_exit(pcie->phy); in tegra_pcie_phys_put()
1479 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_phys_put()
1490 static int tegra_pcie_get_resources(struct tegra_pcie *pcie) in tegra_pcie_get_resources() argument
1492 struct device *dev = pcie->dev; in tegra_pcie_get_resources()
1495 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_get_resources()
1498 err = tegra_pcie_clocks_get(pcie); in tegra_pcie_get_resources()
1504 err = tegra_pcie_resets_get(pcie); in tegra_pcie_get_resources()
1511 err = tegra_pcie_phys_get(pcie); in tegra_pcie_get_resources()
1519 pcie->pads = devm_ioremap_resource(dev, pads); in tegra_pcie_get_resources()
1520 if (IS_ERR(pcie->pads)) { in tegra_pcie_get_resources()
1521 err = PTR_ERR(pcie->pads); in tegra_pcie_get_resources()
1526 pcie->afi = devm_ioremap_resource(dev, afi); in tegra_pcie_get_resources()
1527 if (IS_ERR(pcie->afi)) { in tegra_pcie_get_resources()
1528 err = PTR_ERR(pcie->afi); in tegra_pcie_get_resources()
1539 pcie->cs = *res; in tegra_pcie_get_resources()
1542 pcie->cs.end = pcie->cs.start + SZ_4K - 1; in tegra_pcie_get_resources()
1544 pcie->cfg = devm_ioremap_resource(dev, &pcie->cs); in tegra_pcie_get_resources()
1545 if (IS_ERR(pcie->cfg)) { in tegra_pcie_get_resources()
1546 err = PTR_ERR(pcie->cfg); in tegra_pcie_get_resources()
1557 pcie->irq = err; in tegra_pcie_get_resources()
1559 err = request_irq(pcie->irq, tegra_pcie_isr, IRQF_SHARED, "PCIE", pcie); in tegra_pcie_get_resources()
1569 tegra_pcie_phys_put(pcie); in tegra_pcie_get_resources()
1573 static int tegra_pcie_put_resources(struct tegra_pcie *pcie) in tegra_pcie_put_resources() argument
1575 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_put_resources()
1577 if (pcie->irq > 0) in tegra_pcie_put_resources()
1578 free_irq(pcie->irq, pcie); in tegra_pcie_put_resources()
1581 tegra_pcie_phys_put(pcie); in tegra_pcie_put_resources()
1588 struct tegra_pcie *pcie = port->pcie; in tegra_pcie_pme_turnoff() local
1589 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_pme_turnoff()
1594 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1596 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1599 err = readl_poll_timeout(pcie->afi + AFI_PCIE_PME, val, in tegra_pcie_pme_turnoff()
1602 dev_err(pcie->dev, "PME Ack is not received on port: %d\n", in tegra_pcie_pme_turnoff()
1607 val = afi_readl(pcie, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1609 afi_writel(pcie, val, AFI_PCIE_PME); in tegra_pcie_pme_turnoff()
1645 struct tegra_pcie *pcie = data; in tegra_pcie_msi_irq() local
1646 struct device *dev = pcie->dev; in tegra_pcie_msi_irq()
1647 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_irq()
1651 unsigned long reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1659 afi_writel(pcie, 1 << offset, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1676 reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4); in tegra_pcie_msi_irq()
1748 static int tegra_pcie_msi_setup(struct tegra_pcie *pcie) in tegra_pcie_msi_setup() argument
1750 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_msi_setup()
1751 struct platform_device *pdev = to_platform_device(pcie->dev); in tegra_pcie_msi_setup()
1752 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_setup()
1753 struct device *dev = pcie->dev; in tegra_pcie_msi_setup()
1778 tegra_msi_irq_chip.name, pcie); in tegra_pcie_msi_setup()
1808 free_irq(msi->irq, pcie); in tegra_pcie_msi_setup()
1814 static void tegra_pcie_enable_msi(struct tegra_pcie *pcie) in tegra_pcie_enable_msi() argument
1816 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_enable_msi()
1817 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_enable_msi()
1820 afi_writel(pcie, msi->phys >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_enable_msi()
1821 afi_writel(pcie, msi->phys, AFI_MSI_AXI_BAR_ST); in tegra_pcie_enable_msi()
1823 afi_writel(pcie, 1, AFI_MSI_BAR_SZ); in tegra_pcie_enable_msi()
1826 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC0); in tegra_pcie_enable_msi()
1827 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC1); in tegra_pcie_enable_msi()
1828 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC2); in tegra_pcie_enable_msi()
1829 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC3); in tegra_pcie_enable_msi()
1830 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC4); in tegra_pcie_enable_msi()
1831 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC5); in tegra_pcie_enable_msi()
1832 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC6); in tegra_pcie_enable_msi()
1833 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC7); in tegra_pcie_enable_msi()
1836 reg = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1838 afi_writel(pcie, reg, AFI_INTR_MASK); in tegra_pcie_enable_msi()
1841 static void tegra_pcie_msi_teardown(struct tegra_pcie *pcie) in tegra_pcie_msi_teardown() argument
1843 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_teardown()
1846 dma_free_attrs(pcie->dev, PAGE_SIZE, msi->virt, msi->phys, in tegra_pcie_msi_teardown()
1850 free_irq(msi->irq, pcie); in tegra_pcie_msi_teardown()
1861 static int tegra_pcie_disable_msi(struct tegra_pcie *pcie) in tegra_pcie_disable_msi() argument
1866 value = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1868 afi_writel(pcie, value, AFI_INTR_MASK); in tegra_pcie_disable_msi()
1871 afi_writel(pcie, 0, AFI_MSI_EN_VEC0); in tegra_pcie_disable_msi()
1872 afi_writel(pcie, 0, AFI_MSI_EN_VEC1); in tegra_pcie_disable_msi()
1873 afi_writel(pcie, 0, AFI_MSI_EN_VEC2); in tegra_pcie_disable_msi()
1874 afi_writel(pcie, 0, AFI_MSI_EN_VEC3); in tegra_pcie_disable_msi()
1875 afi_writel(pcie, 0, AFI_MSI_EN_VEC4); in tegra_pcie_disable_msi()
1876 afi_writel(pcie, 0, AFI_MSI_EN_VEC5); in tegra_pcie_disable_msi()
1877 afi_writel(pcie, 0, AFI_MSI_EN_VEC6); in tegra_pcie_disable_msi()
1878 afi_writel(pcie, 0, AFI_MSI_EN_VEC7); in tegra_pcie_disable_msi()
1883 static void tegra_pcie_disable_interrupts(struct tegra_pcie *pcie) in tegra_pcie_disable_interrupts() argument
1887 value = afi_readl(pcie, AFI_INTR_MASK); in tegra_pcie_disable_interrupts()
1889 afi_writel(pcie, value, AFI_INTR_MASK); in tegra_pcie_disable_interrupts()
1892 static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes, in tegra_pcie_get_xbar_config() argument
1895 struct device *dev = pcie->dev; in tegra_pcie_get_xbar_config()
1998 static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie) in tegra_pcie_get_legacy_regulators() argument
2000 struct device *dev = pcie->dev; in tegra_pcie_get_legacy_regulators()
2004 pcie->num_supplies = 3; in tegra_pcie_get_legacy_regulators()
2006 pcie->num_supplies = 2; in tegra_pcie_get_legacy_regulators()
2008 if (pcie->num_supplies == 0) { in tegra_pcie_get_legacy_regulators()
2013 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_legacy_regulators()
2014 sizeof(*pcie->supplies), in tegra_pcie_get_legacy_regulators()
2016 if (!pcie->supplies) in tegra_pcie_get_legacy_regulators()
2019 pcie->supplies[0].supply = "pex-clk"; in tegra_pcie_get_legacy_regulators()
2020 pcie->supplies[1].supply = "vdd"; in tegra_pcie_get_legacy_regulators()
2022 if (pcie->num_supplies > 2) in tegra_pcie_get_legacy_regulators()
2023 pcie->supplies[2].supply = "avdd"; in tegra_pcie_get_legacy_regulators()
2025 return devm_regulator_bulk_get(dev, pcie->num_supplies, pcie->supplies); in tegra_pcie_get_legacy_regulators()
2037 static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask) in tegra_pcie_get_regulators() argument
2039 struct device *dev = pcie->dev; in tegra_pcie_get_regulators()
2044 pcie->num_supplies = 4; in tegra_pcie_get_regulators()
2046 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2047 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
2049 if (!pcie->supplies) in tegra_pcie_get_regulators()
2052 pcie->supplies[i++].supply = "dvdd-pex"; in tegra_pcie_get_regulators()
2053 pcie->supplies[i++].supply = "hvdd-pex-pll"; in tegra_pcie_get_regulators()
2054 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
2055 pcie->supplies[i++].supply = "vddio-pexctl-aud"; in tegra_pcie_get_regulators()
2057 pcie->num_supplies = 6; in tegra_pcie_get_regulators()
2059 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2060 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
2062 if (!pcie->supplies) in tegra_pcie_get_regulators()
2065 pcie->supplies[i++].supply = "avdd-pll-uerefe"; in tegra_pcie_get_regulators()
2066 pcie->supplies[i++].supply = "hvddio-pex"; in tegra_pcie_get_regulators()
2067 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
2068 pcie->supplies[i++].supply = "dvdd-pex-pll"; in tegra_pcie_get_regulators()
2069 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
2070 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
2072 pcie->num_supplies = 7; in tegra_pcie_get_regulators()
2074 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2075 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
2077 if (!pcie->supplies) in tegra_pcie_get_regulators()
2080 pcie->supplies[i++].supply = "avddio-pex"; in tegra_pcie_get_regulators()
2081 pcie->supplies[i++].supply = "dvddio-pex"; in tegra_pcie_get_regulators()
2082 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
2083 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
2084 pcie->supplies[i++].supply = "hvdd-pex-pll-e"; in tegra_pcie_get_regulators()
2085 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
2086 pcie->supplies[i++].supply = "avdd-pll-erefe"; in tegra_pcie_get_regulators()
2098 pcie->num_supplies = 4 + (need_pexa ? 2 : 0) + in tegra_pcie_get_regulators()
2101 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2102 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
2104 if (!pcie->supplies) in tegra_pcie_get_regulators()
2107 pcie->supplies[i++].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
2108 pcie->supplies[i++].supply = "hvdd-pex"; in tegra_pcie_get_regulators()
2109 pcie->supplies[i++].supply = "vddio-pex-ctl"; in tegra_pcie_get_regulators()
2110 pcie->supplies[i++].supply = "avdd-plle"; in tegra_pcie_get_regulators()
2113 pcie->supplies[i++].supply = "avdd-pexa"; in tegra_pcie_get_regulators()
2114 pcie->supplies[i++].supply = "vdd-pexa"; in tegra_pcie_get_regulators()
2118 pcie->supplies[i++].supply = "avdd-pexb"; in tegra_pcie_get_regulators()
2119 pcie->supplies[i++].supply = "vdd-pexb"; in tegra_pcie_get_regulators()
2122 pcie->num_supplies = 5; in tegra_pcie_get_regulators()
2124 pcie->supplies = devm_kcalloc(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2125 sizeof(*pcie->supplies), in tegra_pcie_get_regulators()
2127 if (!pcie->supplies) in tegra_pcie_get_regulators()
2130 pcie->supplies[0].supply = "avdd-pex"; in tegra_pcie_get_regulators()
2131 pcie->supplies[1].supply = "vdd-pex"; in tegra_pcie_get_regulators()
2132 pcie->supplies[2].supply = "avdd-pex-pll"; in tegra_pcie_get_regulators()
2133 pcie->supplies[3].supply = "avdd-plle"; in tegra_pcie_get_regulators()
2134 pcie->supplies[4].supply = "vddio-pex-clk"; in tegra_pcie_get_regulators()
2137 if (of_regulator_bulk_available(dev->of_node, pcie->supplies, in tegra_pcie_get_regulators()
2138 pcie->num_supplies)) in tegra_pcie_get_regulators()
2139 return devm_regulator_bulk_get(dev, pcie->num_supplies, in tegra_pcie_get_regulators()
2140 pcie->supplies); in tegra_pcie_get_regulators()
2149 devm_kfree(dev, pcie->supplies); in tegra_pcie_get_regulators()
2150 pcie->num_supplies = 0; in tegra_pcie_get_regulators()
2152 return tegra_pcie_get_legacy_regulators(pcie); in tegra_pcie_get_regulators()
2155 static int tegra_pcie_parse_dt(struct tegra_pcie *pcie) in tegra_pcie_parse_dt() argument
2157 struct device *dev = pcie->dev; in tegra_pcie_parse_dt()
2159 const struct tegra_pcie_soc *soc = pcie->soc; in tegra_pcie_parse_dt()
2180 pcie->offset.io = res.start - range.pci_addr; in tegra_pcie_parse_dt()
2182 memcpy(&pcie->pio, &res, sizeof(res)); in tegra_pcie_parse_dt()
2183 pcie->pio.name = np->full_name; in tegra_pcie_parse_dt()
2193 pcie->io.start = range.cpu_addr; in tegra_pcie_parse_dt()
2194 pcie->io.end = range.cpu_addr + range.size - 1; in tegra_pcie_parse_dt()
2195 pcie->io.flags = IORESOURCE_MEM; in tegra_pcie_parse_dt()
2196 pcie->io.name = "I/O"; in tegra_pcie_parse_dt()
2198 memcpy(&res, &pcie->io, sizeof(res)); in tegra_pcie_parse_dt()
2208 pcie->offset.mem = res.start - range.pci_addr; in tegra_pcie_parse_dt()
2211 memcpy(&pcie->prefetch, &res, sizeof(res)); in tegra_pcie_parse_dt()
2212 pcie->prefetch.name = "prefetchable"; in tegra_pcie_parse_dt()
2214 memcpy(&pcie->mem, &res, sizeof(res)); in tegra_pcie_parse_dt()
2215 pcie->mem.name = "non-prefetchable"; in tegra_pcie_parse_dt()
2221 err = of_pci_parse_bus_range(np, &pcie->busn); in tegra_pcie_parse_dt()
2224 pcie->busn.name = np->name; in tegra_pcie_parse_dt()
2225 pcie->busn.start = 0; in tegra_pcie_parse_dt()
2226 pcie->busn.end = 0xff; in tegra_pcie_parse_dt()
2227 pcie->busn.flags = IORESOURCE_BUS; in tegra_pcie_parse_dt()
2291 rp->pcie = pcie; in tegra_pcie_parse_dt()
2323 list_add_tail(&rp->list, &pcie->ports); in tegra_pcie_parse_dt()
2326 err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config); in tegra_pcie_parse_dt()
2332 err = tegra_pcie_get_regulators(pcie, mask); in tegra_pcie_parse_dt()
2351 struct device *dev = port->pcie->dev; in tegra_pcie_port_check_link()
2396 static void tegra_pcie_change_link_speed(struct tegra_pcie *pcie) in tegra_pcie_change_link_speed() argument
2398 struct device *dev = pcie->dev; in tegra_pcie_change_link_speed()
2403 list_for_each_entry(port, &pcie->ports, list) { in tegra_pcie_change_link_speed()
2454 static void tegra_pcie_enable_ports(struct tegra_pcie *pcie) in tegra_pcie_enable_ports() argument
2456 struct device *dev = pcie->dev; in tegra_pcie_enable_ports()
2459 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in tegra_pcie_enable_ports()
2467 reset_control_deassert(pcie->pcie_xrst); in tegra_pcie_enable_ports()
2469 list_for_each_entry_safe(port, tmp, &pcie->ports, list) { in tegra_pcie_enable_ports()
2479 if (pcie->soc->has_gen2) in tegra_pcie_enable_ports()
2480 tegra_pcie_change_link_speed(pcie); in tegra_pcie_enable_ports()
2483 static void tegra_pcie_disable_ports(struct tegra_pcie *pcie) in tegra_pcie_disable_ports() argument
2487 reset_control_assert(pcie->pcie_xrst); in tegra_pcie_disable_ports()
2489 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_disable_ports()
2651 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_start() local
2653 if (list_empty(&pcie->ports)) in tegra_pcie_ports_seq_start()
2658 return seq_list_start(&pcie->ports, *pos); in tegra_pcie_ports_seq_start()
2663 struct tegra_pcie *pcie = s->private; in tegra_pcie_ports_seq_next() local
2665 return seq_list_next(v, &pcie->ports, pos); in tegra_pcie_ports_seq_next()
2715 struct tegra_pcie *pcie = inode->i_private; in tegra_pcie_ports_open() local
2724 s->private = pcie; in tegra_pcie_ports_open()
2737 static void tegra_pcie_debugfs_exit(struct tegra_pcie *pcie) in tegra_pcie_debugfs_exit() argument
2739 debugfs_remove_recursive(pcie->debugfs); in tegra_pcie_debugfs_exit()
2740 pcie->debugfs = NULL; in tegra_pcie_debugfs_exit()
2743 static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie) in tegra_pcie_debugfs_init() argument
2747 pcie->debugfs = debugfs_create_dir("pcie", NULL); in tegra_pcie_debugfs_init()
2748 if (!pcie->debugfs) in tegra_pcie_debugfs_init()
2751 file = debugfs_create_file("ports", S_IFREG | S_IRUGO, pcie->debugfs, in tegra_pcie_debugfs_init()
2752 pcie, &tegra_pcie_ports_ops); in tegra_pcie_debugfs_init()
2759 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_debugfs_init()
2767 struct tegra_pcie *pcie; in tegra_pcie_probe() local
2771 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in tegra_pcie_probe()
2775 pcie = pci_host_bridge_priv(host); in tegra_pcie_probe()
2776 host->sysdata = pcie; in tegra_pcie_probe()
2777 platform_set_drvdata(pdev, pcie); in tegra_pcie_probe()
2779 pcie->soc = of_device_get_match_data(dev); in tegra_pcie_probe()
2780 INIT_LIST_HEAD(&pcie->ports); in tegra_pcie_probe()
2781 pcie->dev = dev; in tegra_pcie_probe()
2783 err = tegra_pcie_parse_dt(pcie); in tegra_pcie_probe()
2787 err = tegra_pcie_get_resources(pcie); in tegra_pcie_probe()
2793 err = tegra_pcie_msi_setup(pcie); in tegra_pcie_probe()
2799 pm_runtime_enable(pcie->dev); in tegra_pcie_probe()
2800 err = pm_runtime_get_sync(pcie->dev); in tegra_pcie_probe()
2806 err = tegra_pcie_request_resources(pcie); in tegra_pcie_probe()
2810 host->busnr = pcie->busn.start; in tegra_pcie_probe()
2831 err = tegra_pcie_debugfs_init(pcie); in tegra_pcie_probe()
2839 tegra_pcie_free_resources(pcie); in tegra_pcie_probe()
2841 pm_runtime_put_sync(pcie->dev); in tegra_pcie_probe()
2842 pm_runtime_disable(pcie->dev); in tegra_pcie_probe()
2844 tegra_pcie_msi_teardown(pcie); in tegra_pcie_probe()
2846 tegra_pcie_put_resources(pcie); in tegra_pcie_probe()
2852 struct tegra_pcie *pcie = platform_get_drvdata(pdev); in tegra_pcie_remove() local
2853 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); in tegra_pcie_remove()
2857 tegra_pcie_debugfs_exit(pcie); in tegra_pcie_remove()
2861 tegra_pcie_free_resources(pcie); in tegra_pcie_remove()
2862 pm_runtime_put_sync(pcie->dev); in tegra_pcie_remove()
2863 pm_runtime_disable(pcie->dev); in tegra_pcie_remove()
2866 tegra_pcie_msi_teardown(pcie); in tegra_pcie_remove()
2868 tegra_pcie_put_resources(pcie); in tegra_pcie_remove()
2870 list_for_each_entry_safe(port, tmp, &pcie->ports, list) in tegra_pcie_remove()
2878 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_suspend() local
2882 list_for_each_entry(port, &pcie->ports, list) in tegra_pcie_pm_suspend()
2885 tegra_pcie_disable_ports(pcie); in tegra_pcie_pm_suspend()
2891 tegra_pcie_disable_interrupts(pcie); in tegra_pcie_pm_suspend()
2893 if (pcie->soc->program_uphy) { in tegra_pcie_pm_suspend()
2894 err = tegra_pcie_phy_power_off(pcie); in tegra_pcie_pm_suspend()
2899 reset_control_assert(pcie->pex_rst); in tegra_pcie_pm_suspend()
2900 clk_disable_unprepare(pcie->pex_clk); in tegra_pcie_pm_suspend()
2903 tegra_pcie_disable_msi(pcie); in tegra_pcie_pm_suspend()
2906 tegra_pcie_power_off(pcie); in tegra_pcie_pm_suspend()
2913 struct tegra_pcie *pcie = dev_get_drvdata(dev); in tegra_pcie_pm_resume() local
2916 err = tegra_pcie_power_on(pcie); in tegra_pcie_pm_resume()
2928 tegra_pcie_enable_controller(pcie); in tegra_pcie_pm_resume()
2929 tegra_pcie_setup_translations(pcie); in tegra_pcie_pm_resume()
2932 tegra_pcie_enable_msi(pcie); in tegra_pcie_pm_resume()
2934 err = clk_prepare_enable(pcie->pex_clk); in tegra_pcie_pm_resume()
2940 reset_control_deassert(pcie->pex_rst); in tegra_pcie_pm_resume()
2942 if (pcie->soc->program_uphy) { in tegra_pcie_pm_resume()
2943 err = tegra_pcie_phy_power_on(pcie); in tegra_pcie_pm_resume()
2950 tegra_pcie_apply_pad_settings(pcie); in tegra_pcie_pm_resume()
2951 tegra_pcie_enable_ports(pcie); in tegra_pcie_pm_resume()
2956 reset_control_assert(pcie->pex_rst); in tegra_pcie_pm_resume()
2957 clk_disable_unprepare(pcie->pex_clk); in tegra_pcie_pm_resume()
2961 tegra_pcie_power_off(pcie); in tegra_pcie_pm_resume()