Lines Matching refs:gmac
105 static int get_clk_div_sgmii(struct ipq806x_gmac *gmac, unsigned int speed) in get_clk_div_sgmii() argument
107 struct device *dev = &gmac->pdev->dev; in get_clk_div_sgmii()
131 static int get_clk_div_rgmii(struct ipq806x_gmac *gmac, unsigned int speed) in get_clk_div_rgmii() argument
133 struct device *dev = &gmac->pdev->dev; in get_clk_div_rgmii()
157 static int ipq806x_gmac_set_speed(struct ipq806x_gmac *gmac, unsigned int speed) in ipq806x_gmac_set_speed() argument
162 switch (gmac->phy_mode) { in ipq806x_gmac_set_speed()
164 div = get_clk_div_rgmii(gmac, speed); in ipq806x_gmac_set_speed()
165 clk_bits = NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) | in ipq806x_gmac_set_speed()
166 NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id); in ipq806x_gmac_set_speed()
170 div = get_clk_div_sgmii(gmac, speed); in ipq806x_gmac_set_speed()
171 clk_bits = NSS_COMMON_CLK_GATE_GMII_RX_EN(gmac->id) | in ipq806x_gmac_set_speed()
172 NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id); in ipq806x_gmac_set_speed()
176 dev_err(&gmac->pdev->dev, "Unsupported PHY mode: \"%s\"\n", in ipq806x_gmac_set_speed()
177 phy_modes(gmac->phy_mode)); in ipq806x_gmac_set_speed()
182 regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val); in ipq806x_gmac_set_speed()
184 regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val); in ipq806x_gmac_set_speed()
187 regmap_read(gmac->nss_common, NSS_COMMON_CLK_DIV0, &val); in ipq806x_gmac_set_speed()
189 << NSS_COMMON_CLK_DIV_OFFSET(gmac->id)); in ipq806x_gmac_set_speed()
190 val |= div << NSS_COMMON_CLK_DIV_OFFSET(gmac->id); in ipq806x_gmac_set_speed()
191 regmap_write(gmac->nss_common, NSS_COMMON_CLK_DIV0, val); in ipq806x_gmac_set_speed()
194 regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val); in ipq806x_gmac_set_speed()
196 regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val); in ipq806x_gmac_set_speed()
201 static void *ipq806x_gmac_of_parse(struct ipq806x_gmac *gmac) in ipq806x_gmac_of_parse() argument
203 struct device *dev = &gmac->pdev->dev; in ipq806x_gmac_of_parse()
205 gmac->phy_mode = of_get_phy_mode(dev->of_node); in ipq806x_gmac_of_parse()
206 if ((int)gmac->phy_mode < 0) { in ipq806x_gmac_of_parse()
211 if (of_property_read_u32(dev->of_node, "qcom,id", &gmac->id) < 0) { in ipq806x_gmac_of_parse()
220 if (gmac->id < 0 || gmac->id > 3) { in ipq806x_gmac_of_parse()
225 gmac->core_clk = devm_clk_get(dev, "stmmaceth"); in ipq806x_gmac_of_parse()
226 if (IS_ERR(gmac->core_clk)) { in ipq806x_gmac_of_parse()
228 return gmac->core_clk; in ipq806x_gmac_of_parse()
230 clk_set_rate(gmac->core_clk, 266000000); in ipq806x_gmac_of_parse()
233 gmac->nss_common = syscon_regmap_lookup_by_phandle(dev->of_node, in ipq806x_gmac_of_parse()
235 if (IS_ERR(gmac->nss_common)) { in ipq806x_gmac_of_parse()
237 return gmac->nss_common; in ipq806x_gmac_of_parse()
241 gmac->qsgmii_csr = syscon_regmap_lookup_by_phandle(dev->of_node, in ipq806x_gmac_of_parse()
243 if (IS_ERR(gmac->qsgmii_csr)) { in ipq806x_gmac_of_parse()
245 return gmac->qsgmii_csr; in ipq806x_gmac_of_parse()
253 struct ipq806x_gmac *gmac = priv; in ipq806x_gmac_fix_mac_speed() local
255 ipq806x_gmac_set_speed(gmac, speed); in ipq806x_gmac_fix_mac_speed()
263 struct ipq806x_gmac *gmac; in ipq806x_gmac_probe() local
275 gmac = devm_kzalloc(dev, sizeof(*gmac), GFP_KERNEL); in ipq806x_gmac_probe()
276 if (!gmac) in ipq806x_gmac_probe()
279 gmac->pdev = pdev; in ipq806x_gmac_probe()
281 err = ipq806x_gmac_of_parse(gmac); in ipq806x_gmac_probe()
287 regmap_write(gmac->qsgmii_csr, QSGMII_PCS_CAL_LCKDT_CTL, in ipq806x_gmac_probe()
295 switch (gmac->phy_mode) { in ipq806x_gmac_probe()
304 phy_modes(gmac->phy_mode)); in ipq806x_gmac_probe()
307 regmap_write(gmac->nss_common, NSS_COMMON_GMAC_CTL(gmac->id), val); in ipq806x_gmac_probe()
310 regmap_read(gmac->nss_common, NSS_COMMON_CLK_SRC_CTRL, &val); in ipq806x_gmac_probe()
311 val &= ~(1 << NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id)); in ipq806x_gmac_probe()
312 switch (gmac->phy_mode) { in ipq806x_gmac_probe()
314 val |= NSS_COMMON_CLK_SRC_CTRL_RGMII(gmac->id) << in ipq806x_gmac_probe()
315 NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id); in ipq806x_gmac_probe()
318 val |= NSS_COMMON_CLK_SRC_CTRL_SGMII(gmac->id) << in ipq806x_gmac_probe()
319 NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id); in ipq806x_gmac_probe()
323 phy_modes(gmac->phy_mode)); in ipq806x_gmac_probe()
326 regmap_write(gmac->nss_common, NSS_COMMON_CLK_SRC_CTRL, val); in ipq806x_gmac_probe()
329 regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val); in ipq806x_gmac_probe()
330 val |= NSS_COMMON_CLK_GATE_PTP_EN(gmac->id); in ipq806x_gmac_probe()
331 switch (gmac->phy_mode) { in ipq806x_gmac_probe()
333 val |= NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) | in ipq806x_gmac_probe()
334 NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id); in ipq806x_gmac_probe()
337 val |= NSS_COMMON_CLK_GATE_GMII_RX_EN(gmac->id) | in ipq806x_gmac_probe()
338 NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id); in ipq806x_gmac_probe()
344 regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val); in ipq806x_gmac_probe()
346 if (gmac->phy_mode == PHY_INTERFACE_MODE_SGMII) { in ipq806x_gmac_probe()
347 regmap_write(gmac->qsgmii_csr, QSGMII_PHY_SGMII_CTL(gmac->id), in ipq806x_gmac_probe()
361 plat_dat->bsp_priv = gmac; in ipq806x_gmac_probe()