• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revisión86062e7a5deb8b32112f6c05403b6a2e5d9f1853 (tree)
Tiempo2022-07-14 06:03:37
AutorWeijie Gao <weijie.gao@medi...>
CommiterDaniel Schwierzeck

Log Message

net: mediatek: use regmap api to modify ethsys registers

The address returned by regmap_get_range() is not remapped. Directly r/w
to this address is ok for ARM platforms since it's idential to the virtual
address.

But for MIPS platform only virtual address should be used for access.
To solve this issue, the regmap api regmap_read/regmap_write should be used
since they will remap address before accessing.

Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>

Cambiar Resumen

Diferencia incremental

--- a/drivers/net/mtk_eth.c
+++ b/drivers/net/mtk_eth.c
@@ -159,9 +159,10 @@ struct mtk_eth_priv {
159159
160160 void __iomem *fe_base;
161161 void __iomem *gmac_base;
162- void __iomem *ethsys_base;
163162 void __iomem *sgmii_base;
164163
164+ struct regmap *ethsys_regmap;
165+
165166 struct mii_dev *mdio_bus;
166167 int (*mii_read)(struct mtk_eth_priv *priv, u8 phy, u8 reg);
167168 int (*mii_write)(struct mtk_eth_priv *priv, u8 phy, u8 reg, u16 val);
@@ -233,7 +234,12 @@ static void mtk_gmac_rmw(struct mtk_eth_priv *priv, u32 reg, u32 clr, u32 set)
233234 static void mtk_ethsys_rmw(struct mtk_eth_priv *priv, u32 reg, u32 clr,
234235 u32 set)
235236 {
236- clrsetbits_le32(priv->ethsys_base + reg, clr, set);
237+ uint val;
238+
239+ regmap_read(priv->ethsys_regmap, reg, &val);
240+ val &= ~clr;
241+ val |= set;
242+ regmap_write(priv->ethsys_regmap, reg, val);
237243 }
238244
239245 /* Direct MDIO clause 22/45 access via SoC */
@@ -1427,15 +1433,9 @@ static int mtk_eth_of_to_plat(struct udevice *dev)
14271433 if (ret)
14281434 return ret;
14291435
1430- regmap = syscon_node_to_regmap(args.node);
1431- if (IS_ERR(regmap))
1432- return PTR_ERR(regmap);
1433-
1434- priv->ethsys_base = regmap_get_range(regmap, 0);
1435- if (!priv->ethsys_base) {
1436- dev_err(dev, "Unable to find ethsys\n");
1437- return -ENODEV;
1438- }
1436+ priv->ethsys_regmap = syscon_node_to_regmap(args.node);
1437+ if (IS_ERR(priv->ethsys_regmap))
1438+ return PTR_ERR(priv->ethsys_regmap);
14391439
14401440 /* Reset controllers */
14411441 ret = reset_get_by_name(dev, "fe", &priv->rst_fe);