Lines Matching +full:versal +full:- +full:clk

1 // SPDX-License-Identifier: GPL-2.0
3 * dwc3-xilinx.c - Xilinx DWC3 controller specific glue driver
12 #include <linux/clk.h>
15 #include <linux/dma-mapping.h>
21 #include <linux/firmware/xlnx-zynqmp.h>
34 /* Versal USB Reset ID */
60 reg = readl(priv_data->regs + XLNX_USB_PHY_RST_EN); in dwc3_xlnx_mask_phy_rst()
67 writel(reg, priv_data->regs + XLNX_USB_PHY_RST_EN); in dwc3_xlnx_mask_phy_rst()
72 struct device *dev = priv_data->dev; in dwc3_xlnx_init_versal()
77 /* Assert and De-assert reset */ in dwc3_xlnx_init_versal()
88 dev_err_probe(dev, ret, "failed to De-assert Reset\n"); in dwc3_xlnx_init_versal()
99 struct device *dev = priv_data->dev; in dwc3_xlnx_init_zynqmp()
105 usb3_phy = devm_phy_get(dev, "usb3-phy"); in dwc3_xlnx_init_zynqmp()
106 if (PTR_ERR(usb3_phy) == -EPROBE_DEFER) { in dwc3_xlnx_init_zynqmp()
107 ret = -EPROBE_DEFER; in dwc3_xlnx_init_zynqmp()
168 writel(FPD_POWER_PRSNT_OPTION, priv_data->regs + XLNX_USB_FPD_POWER_PRSNT); in dwc3_xlnx_init_zynqmp()
171 writel(PIPE_CLK_SELECT, priv_data->regs + XLNX_USB_FPD_PIPE_CLK); in dwc3_xlnx_init_zynqmp()
196 if (of_dma_is_coherent(dev->of_node) || device_iommu_mapped(dev)) { in dwc3_xlnx_init_zynqmp()
197 reg = readl(priv_data->regs + XLNX_USB_TRAFFIC_ROUTE_CONFIG); in dwc3_xlnx_init_zynqmp()
199 writel(reg, priv_data->regs + XLNX_USB_TRAFFIC_ROUTE_CONFIG); in dwc3_xlnx_init_zynqmp()
208 .compatible = "xlnx,zynqmp-dwc3",
212 .compatible = "xlnx,versal-dwc3",
222 struct device *dev = &pdev->dev; in dwc3_xlnx_probe()
223 struct device_node *np = dev->of_node; in dwc3_xlnx_probe()
230 return -ENOMEM; in dwc3_xlnx_probe()
239 match = of_match_node(dwc3_xlnx_of_match, pdev->dev.of_node); in dwc3_xlnx_probe()
241 priv_data->pltfm_init = match->data; in dwc3_xlnx_probe()
242 priv_data->regs = regs; in dwc3_xlnx_probe()
243 priv_data->dev = dev; in dwc3_xlnx_probe()
247 ret = devm_clk_bulk_get_all(priv_data->dev, &priv_data->clks); in dwc3_xlnx_probe()
251 priv_data->num_clocks = ret; in dwc3_xlnx_probe()
253 ret = clk_bulk_prepare_enable(priv_data->num_clocks, priv_data->clks); in dwc3_xlnx_probe()
257 ret = priv_data->pltfm_init(priv_data); in dwc3_xlnx_probe()
273 clk_bulk_disable_unprepare(priv_data->num_clocks, priv_data->clks); in dwc3_xlnx_probe()
281 struct device *dev = &pdev->dev; in dwc3_xlnx_remove()
285 clk_bulk_disable_unprepare(priv_data->num_clocks, priv_data->clks); in dwc3_xlnx_remove()
286 priv_data->num_clocks = 0; in dwc3_xlnx_remove()
299 clk_bulk_disable(priv_data->num_clocks, priv_data->clks); in dwc3_xlnx_suspend_common()
308 return clk_bulk_enable(priv_data->num_clocks, priv_data->clks); in dwc3_xlnx_resume_common()
326 .name = "dwc3-xilinx",