Lines Matching full:dwmac

3  * dwmac-imx.c - DWMAC Specific Glue layer for NXP imx8
72 struct imx_priv_data *dwmac = plat_dat->bsp_priv; in imx8mp_set_intf_mode() local
81 val |= (dwmac->rmii_refclk_ext ? 0 : GPR_ENET_QOS_CLK_TX_CLK_SEL); in imx8mp_set_intf_mode()
91 pr_debug("imx dwmac doesn't support %d interface\n", in imx8mp_set_intf_mode()
97 return regmap_update_bits(dwmac->intf_regmap, dwmac->intf_reg_off, in imx8mp_set_intf_mode()
112 struct imx_priv_data *dwmac = plat_dat->bsp_priv; in imx93_set_intf_mode() local
120 if (dwmac->rmii_refclk_ext) { in imx93_set_intf_mode()
121 ret = regmap_clear_bits(dwmac->intf_regmap, in imx93_set_intf_mode()
122 dwmac->intf_reg_off + in imx93_set_intf_mode()
137 dev_dbg(dwmac->dev, "imx dwmac doesn't support %d interface\n", in imx93_set_intf_mode()
143 return regmap_update_bits(dwmac->intf_regmap, dwmac->intf_reg_off, in imx93_set_intf_mode()
149 struct imx_priv_data *dwmac = priv; in imx_dwmac_clks_config() local
153 ret = clk_prepare_enable(dwmac->clk_mem); in imx_dwmac_clks_config()
155 dev_err(dwmac->dev, "mem clock enable failed\n"); in imx_dwmac_clks_config()
159 ret = clk_prepare_enable(dwmac->clk_tx); in imx_dwmac_clks_config()
161 dev_err(dwmac->dev, "tx clock enable failed\n"); in imx_dwmac_clks_config()
162 clk_disable_unprepare(dwmac->clk_mem); in imx_dwmac_clks_config()
166 clk_disable_unprepare(dwmac->clk_tx); in imx_dwmac_clks_config()
167 clk_disable_unprepare(dwmac->clk_mem); in imx_dwmac_clks_config()
176 struct imx_priv_data *dwmac = priv; in imx_dwmac_init() local
179 plat_dat = dwmac->plat_dat; in imx_dwmac_init()
181 if (dwmac->ops->set_intf_mode) { in imx_dwmac_init()
182 ret = dwmac->ops->set_intf_mode(plat_dat); in imx_dwmac_init()
198 struct imx_priv_data *dwmac = priv; in imx_dwmac_fix_speed() local
202 plat_dat = dwmac->plat_dat; in imx_dwmac_fix_speed()
204 if (dwmac->ops->mac_rgmii_txclk_auto_adj || in imx_dwmac_fix_speed()
211 dev_err(dwmac->dev, "invalid speed %u\n", speed); in imx_dwmac_fix_speed()
215 err = clk_set_rate(dwmac->clk_tx, rate); in imx_dwmac_fix_speed()
217 dev_err(dwmac->dev, "failed to set tx rate %lu\n", rate); in imx_dwmac_fix_speed()
222 struct imx_priv_data *dwmac = priv; in imx93_dwmac_fix_speed() local
228 if (!dwmac || mode != MLO_AN_FIXED) in imx93_dwmac_fix_speed()
231 if (regmap_read(dwmac->intf_regmap, dwmac->intf_reg_off, &iface)) in imx93_dwmac_fix_speed()
238 old_ctrl = readl(dwmac->base_addr + MAC_CTRL_REG); in imx93_dwmac_fix_speed()
240 regmap_update_bits(dwmac->intf_regmap, dwmac->intf_reg_off, in imx93_dwmac_fix_speed()
242 writel(ctrl, dwmac->base_addr + MAC_CTRL_REG); in imx93_dwmac_fix_speed()
245 readl(dwmac->base_addr + MAC_CTRL_REG); in imx93_dwmac_fix_speed()
249 regmap_update_bits(dwmac->intf_regmap, dwmac->intf_reg_off, in imx93_dwmac_fix_speed()
252 writel(old_ctrl, dwmac->base_addr + MAC_CTRL_REG); in imx93_dwmac_fix_speed()
275 imx_dwmac_parse_dt(struct imx_priv_data *dwmac, struct device *dev) in imx_dwmac_parse_dt() argument
280 dwmac->rmii_refclk_ext = of_property_read_bool(np, "snps,rmii_refclk_ext"); in imx_dwmac_parse_dt()
282 dwmac->clk_tx = devm_clk_get(dev, "tx"); in imx_dwmac_parse_dt()
283 if (IS_ERR(dwmac->clk_tx)) { in imx_dwmac_parse_dt()
285 return PTR_ERR(dwmac->clk_tx); in imx_dwmac_parse_dt()
288 dwmac->clk_mem = NULL; in imx_dwmac_parse_dt()
292 dwmac->clk_mem = devm_clk_get(dev, "mem"); in imx_dwmac_parse_dt()
293 if (IS_ERR(dwmac->clk_mem)) { in imx_dwmac_parse_dt()
295 return PTR_ERR(dwmac->clk_mem); in imx_dwmac_parse_dt()
305 dwmac->intf_regmap = in imx_dwmac_parse_dt()
307 &dwmac->intf_reg_off); in imx_dwmac_parse_dt()
308 if (IS_ERR(dwmac->intf_regmap)) in imx_dwmac_parse_dt()
309 return PTR_ERR(dwmac->intf_regmap); in imx_dwmac_parse_dt()
319 struct imx_priv_data *dwmac; in imx_dwmac_probe() local
327 dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL); in imx_dwmac_probe()
328 if (!dwmac) in imx_dwmac_probe()
341 dwmac->ops = data; in imx_dwmac_probe()
342 dwmac->dev = &pdev->dev; in imx_dwmac_probe()
344 ret = imx_dwmac_parse_dt(dwmac, &pdev->dev); in imx_dwmac_probe()
357 plat_dat->host_dma_width = dwmac->ops->addr_width; in imx_dwmac_probe()
362 plat_dat->bsp_priv = dwmac; in imx_dwmac_probe()
363 dwmac->plat_dat = plat_dat; in imx_dwmac_probe()
364 dwmac->base_addr = stmmac_res.addr; in imx_dwmac_probe()
366 ret = imx_dwmac_clks_config(dwmac, true); in imx_dwmac_probe()
370 ret = imx_dwmac_init(pdev, dwmac); in imx_dwmac_probe()
374 if (dwmac->ops->fix_mac_speed) in imx_dwmac_probe()
375 plat_dat->fix_mac_speed = dwmac->ops->fix_mac_speed; in imx_dwmac_probe()
376 dwmac->plat_dat->fix_soc_reset = dwmac->ops->fix_soc_reset; in imx_dwmac_probe()
387 imx_dwmac_clks_config(dwmac, false); in imx_dwmac_probe()
413 { .compatible = "nxp,imx8mp-dwmac-eqos", .data = &imx8mp_dwmac_data },
414 { .compatible = "nxp,imx8dxl-dwmac-eqos", .data = &imx8dxl_dwmac_data },
415 { .compatible = "nxp,imx93-dwmac-eqos", .data = &imx93_dwmac_data },
424 .name = "imx-dwmac",
432 MODULE_DESCRIPTION("NXP imx8 DWMAC Specific Glue layer");