Lines Matching +full:pci +full:- +full:phy

1 // SPDX-License-Identifier: GPL-2.0
14 #include <linux/pci.h>
19 #include <linux/phy/phy.h>
22 #include "pcie-designware.h"
24 #define to_meson_pcie(x) dev_get_drvdata((x)->dev)
68 struct dw_pcie pci; member
73 struct phy *phy; member
80 struct device *dev = mp->pci.dev; in meson_pcie_get_reset()
93 struct meson_pcie_rc_reset *mrst = &mp->mrst; in meson_pcie_get_resets()
95 mrst->port = meson_pcie_get_reset(mp, "port", PCIE_NORMAL_RESET); in meson_pcie_get_resets()
96 if (IS_ERR(mrst->port)) in meson_pcie_get_resets()
97 return PTR_ERR(mrst->port); in meson_pcie_get_resets()
98 reset_control_deassert(mrst->port); in meson_pcie_get_resets()
100 mrst->apb = meson_pcie_get_reset(mp, "apb", PCIE_SHARED_RESET); in meson_pcie_get_resets()
101 if (IS_ERR(mrst->apb)) in meson_pcie_get_resets()
102 return PTR_ERR(mrst->apb); in meson_pcie_get_resets()
103 reset_control_deassert(mrst->apb); in meson_pcie_get_resets()
111 struct dw_pcie *pci = &mp->pci; in meson_pcie_get_mems() local
113 pci->dbi_base = devm_platform_ioremap_resource_byname(pdev, "elbi"); in meson_pcie_get_mems()
114 if (IS_ERR(pci->dbi_base)) in meson_pcie_get_mems()
115 return PTR_ERR(pci->dbi_base); in meson_pcie_get_mems()
117 mp->cfg_base = devm_platform_ioremap_resource_byname(pdev, "cfg"); in meson_pcie_get_mems()
118 if (IS_ERR(mp->cfg_base)) in meson_pcie_get_mems()
119 return PTR_ERR(mp->cfg_base); in meson_pcie_get_mems()
128 ret = phy_init(mp->phy); in meson_pcie_power_on()
132 ret = phy_power_on(mp->phy); in meson_pcie_power_on()
134 phy_exit(mp->phy); in meson_pcie_power_on()
143 phy_power_off(mp->phy); in meson_pcie_power_off()
144 phy_exit(mp->phy); in meson_pcie_power_off()
149 struct meson_pcie_rc_reset *mrst = &mp->mrst; in meson_pcie_reset()
152 ret = phy_reset(mp->phy); in meson_pcie_reset()
156 reset_control_assert(mrst->port); in meson_pcie_reset()
157 reset_control_assert(mrst->apb); in meson_pcie_reset()
159 reset_control_deassert(mrst->port); in meson_pcie_reset()
160 reset_control_deassert(mrst->apb); in meson_pcie_reset()
199 struct device *dev = mp->pci.dev; in meson_pcie_probe_clocks()
200 struct meson_pcie_clk_res *res = &mp->clk_res; in meson_pcie_probe_clocks()
202 res->port_clk = meson_pcie_probe_clock(dev, "port", PORT_CLK_RATE); in meson_pcie_probe_clocks()
203 if (IS_ERR(res->port_clk)) in meson_pcie_probe_clocks()
204 return PTR_ERR(res->port_clk); in meson_pcie_probe_clocks()
206 res->general_clk = meson_pcie_probe_clock(dev, "general", 0); in meson_pcie_probe_clocks()
207 if (IS_ERR(res->general_clk)) in meson_pcie_probe_clocks()
208 return PTR_ERR(res->general_clk); in meson_pcie_probe_clocks()
210 res->clk = meson_pcie_probe_clock(dev, "pclk", 0); in meson_pcie_probe_clocks()
211 if (IS_ERR(res->clk)) in meson_pcie_probe_clocks()
212 return PTR_ERR(res->clk); in meson_pcie_probe_clocks()
219 return readl(mp->cfg_base + reg); in meson_cfg_readl()
224 writel(val, mp->cfg_base + reg); in meson_cfg_writel()
229 gpiod_set_value_cansleep(mp->reset_gpio, 1); in meson_pcie_assert_reset()
231 gpiod_set_value_cansleep(mp->reset_gpio, 0); in meson_pcie_assert_reset()
245 struct device *dev = mp->pci.dev; in meson_size_to_payload()
257 return fls(size) - 8; in meson_size_to_payload()
262 struct dw_pcie *pci = &mp->pci; in meson_set_max_payload() local
264 u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in meson_set_max_payload()
267 val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL); in meson_set_max_payload()
269 dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val); in meson_set_max_payload()
271 val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL); in meson_set_max_payload()
273 dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val); in meson_set_max_payload()
278 struct dw_pcie *pci = &mp->pci; in meson_set_max_rd_req_size() local
280 u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in meson_set_max_rd_req_size()
283 val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL); in meson_set_max_rd_req_size()
285 dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val); in meson_set_max_rd_req_size()
287 val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL); in meson_set_max_rd_req_size()
289 dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val); in meson_set_max_rd_req_size()
292 static int meson_pcie_start_link(struct dw_pcie *pci) in meson_pcie_start_link() argument
294 struct meson_pcie *mp = to_meson_pcie(pci); in meson_pcie_start_link()
318 *val = (*val & ((1 << (size * 8)) - 1)) << (8 * (where & 3)); in meson_pcie_rd_own_conf()
322 *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1); in meson_pcie_rd_own_conf()
334 static int meson_pcie_link_up(struct dw_pcie *pci) in meson_pcie_link_up() argument
336 struct meson_pcie *mp = to_meson_pcie(pci); in meson_pcie_link_up()
337 struct device *dev = pci->dev; in meson_pcie_link_up()
375 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in meson_pcie_host_init() local
376 struct meson_pcie *mp = to_meson_pcie(pci); in meson_pcie_host_init()
378 pp->bridge->ops = &meson_pci_ops; in meson_pcie_host_init()
397 struct device *dev = &pdev->dev; in meson_pcie_probe()
398 struct dw_pcie *pci; in meson_pcie_probe() local
404 return -ENOMEM; in meson_pcie_probe()
406 pci = &mp->pci; in meson_pcie_probe()
407 pci->dev = dev; in meson_pcie_probe()
408 pci->ops = &dw_pcie_ops; in meson_pcie_probe()
409 pci->pp.ops = &meson_pcie_host_ops; in meson_pcie_probe()
410 pci->num_lanes = 1; in meson_pcie_probe()
412 mp->phy = devm_phy_get(dev, "pcie"); in meson_pcie_probe()
413 if (IS_ERR(mp->phy)) { in meson_pcie_probe()
414 dev_err(dev, "get phy failed, %ld\n", PTR_ERR(mp->phy)); in meson_pcie_probe()
415 return PTR_ERR(mp->phy); in meson_pcie_probe()
418 mp->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in meson_pcie_probe()
419 if (IS_ERR(mp->reset_gpio)) { in meson_pcie_probe()
421 return PTR_ERR(mp->reset_gpio); in meson_pcie_probe()
438 dev_err(dev, "phy power on failed, %d\n", ret); in meson_pcie_probe()
456 ret = dw_pcie_host_init(&pci->pp); in meson_pcie_probe()
471 .compatible = "amlogic,axg-pcie",
474 .compatible = "amlogic,g12a-pcie",
483 .name = "meson-pcie",