Lines Matching +full:dwmac +full:- +full:4

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Loongson-1 DWMAC glue layer
5 * Copyright (C) 2011-2023 Keguang Zhang <keguang.zhang@gmail.com>
21 /* Loongson-1 SYSCON Registers */
25 /* Loongson-1B SYSCON Register Bits */
26 #define GMAC1_USE_UART1 BIT(4)
37 /* Loongson-1C SYSCON Register Bits */
42 #define PHY_INTF_RMII FIELD_PREP(PHY_INTF_SELI, 4)
59 struct ls1x_dwmac *dwmac = plat_dat->bsp_priv; in ls1b_dwmac_setup() local
64 /* This shouldn't fail - stmmac_get_platform_resources() in ls1b_dwmac_setup()
67 dev_err(&pdev->dev, "Could not get IO_MEM resources\n"); in ls1b_dwmac_setup()
68 return -EINVAL; in ls1b_dwmac_setup()
71 if (res->start == LS1B_GMAC0_BASE) { in ls1b_dwmac_setup()
72 dwmac->id = 0; in ls1b_dwmac_setup()
73 } else if (res->start == LS1B_GMAC1_BASE) { in ls1b_dwmac_setup()
74 dwmac->id = 1; in ls1b_dwmac_setup()
76 dev_err(&pdev->dev, "Invalid Ethernet MAC base address %pR", in ls1b_dwmac_setup()
78 return -EINVAL; in ls1b_dwmac_setup()
86 struct ls1x_dwmac *dwmac = priv; in ls1b_dwmac_syscon_init() local
87 struct plat_stmmacenet_data *plat = dwmac->plat_dat; in ls1b_dwmac_syscon_init()
88 struct regmap *regmap = dwmac->regmap; in ls1b_dwmac_syscon_init()
90 if (dwmac->id == 0) { in ls1b_dwmac_syscon_init()
91 switch (plat->phy_interface) { in ls1b_dwmac_syscon_init()
103 dev_err(&pdev->dev, "Unsupported PHY mode %u\n", in ls1b_dwmac_syscon_init()
104 plat->phy_interface); in ls1b_dwmac_syscon_init()
105 return -EOPNOTSUPP; in ls1b_dwmac_syscon_init()
109 } else if (dwmac->id == 1) { in ls1b_dwmac_syscon_init()
114 switch (plat->phy_interface) { in ls1b_dwmac_syscon_init()
127 dev_err(&pdev->dev, "Unsupported PHY mode %u\n", in ls1b_dwmac_syscon_init()
128 plat->phy_interface); in ls1b_dwmac_syscon_init()
129 return -EOPNOTSUPP; in ls1b_dwmac_syscon_init()
140 struct ls1x_dwmac *dwmac = priv; in ls1c_dwmac_syscon_init() local
141 struct plat_stmmacenet_data *plat = dwmac->plat_dat; in ls1c_dwmac_syscon_init()
142 struct regmap *regmap = dwmac->regmap; in ls1c_dwmac_syscon_init()
144 switch (plat->phy_interface) { in ls1c_dwmac_syscon_init()
154 dev_err(&pdev->dev, "Unsupported PHY-mode %u\n", in ls1c_dwmac_syscon_init()
155 plat->phy_interface); in ls1c_dwmac_syscon_init()
156 return -EOPNOTSUPP; in ls1c_dwmac_syscon_init()
170 struct ls1x_dwmac *dwmac; in ls1x_dwmac_probe() local
178 regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, in ls1x_dwmac_probe()
179 "loongson,ls1-syscon"); in ls1x_dwmac_probe()
181 return dev_err_probe(&pdev->dev, PTR_ERR(regmap), in ls1x_dwmac_probe()
184 data = of_device_get_match_data(&pdev->dev); in ls1x_dwmac_probe()
186 dev_err(&pdev->dev, "No of match data provided\n"); in ls1x_dwmac_probe()
187 return -EINVAL; in ls1x_dwmac_probe()
190 dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL); in ls1x_dwmac_probe()
191 if (!dwmac) in ls1x_dwmac_probe()
192 return -ENOMEM; in ls1x_dwmac_probe()
196 return dev_err_probe(&pdev->dev, PTR_ERR(plat_dat), in ls1x_dwmac_probe()
199 plat_dat->bsp_priv = dwmac; in ls1x_dwmac_probe()
200 plat_dat->init = data->init; in ls1x_dwmac_probe()
201 dwmac->plat_dat = plat_dat; in ls1x_dwmac_probe()
202 dwmac->regmap = regmap; in ls1x_dwmac_probe()
204 if (data->setup) { in ls1x_dwmac_probe()
205 ret = data->setup(pdev, plat_dat); in ls1x_dwmac_probe()
224 .compatible = "loongson,ls1b-gmac",
228 .compatible = "loongson,ls1c-emac",
238 .name = "loongson1-dwmac",
245 MODULE_DESCRIPTION("Loongson-1 DWMAC glue layer");