Skip to content

Commit

Permalink
net: stmmac: dwmac-rk: Validate GRF and peripheral GRF during probe
Browse files Browse the repository at this point in the history
All Rockchip GMAC variants typically write to GRF regs to control e.g.
interface mode, speed and MAC rx/tx delay. Newer SoCs such as RK3576 and
RK3588 use a mix of GRF and peripheral GRF regs. These syscon regmaps is
located with help of a rockchip,grf and rockchip,php-grf phandle.

However, validating the rockchip,grf and rockchip,php-grf syscon regmap
is deferred until e.g. interface mode or speed is configured, inside the
individual SoC specific operations.

Change to validate the rockchip,grf and rockchip,php-grf syscon regmap
at probe time to simplify all SoC specific operations.

This should not introduce any backward compatibility issues as all
GMAC nodes have been added together with a rockchip,grf phandle (and
rockchip,php-grf where required) in their initial commit.

Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250308213720.2517944-3-jonas@kwiboo.se
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
  • Loading branch information
Jonas Karlman authored and Paolo Abeni committed Mar 13, 2025
1 parent 313cf06 commit 247e84f
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct rk_gmac_ops {
void (*set_clock_selection)(struct rk_priv_data *bsp_priv, bool input,
bool enable);
void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv);
bool php_grf_required;
bool regs_valid;
u32 regs[];
};
Expand Down Expand Up @@ -1254,6 +1255,7 @@ static const struct rk_gmac_ops rk3576_ops = {
.set_rgmii_speed = rk3576_set_gmac_speed,
.set_rmii_speed = rk3576_set_gmac_speed,
.set_clock_selection = rk3576_set_clock_selection,
.php_grf_required = true,
.regs_valid = true,
.regs = {
0x2a220000, /* gmac0 */
Expand Down Expand Up @@ -1401,6 +1403,7 @@ static const struct rk_gmac_ops rk3588_ops = {
.set_rgmii_speed = rk3588_set_gmac_speed,
.set_rmii_speed = rk3588_set_gmac_speed,
.set_clock_selection = rk3588_set_clock_selection,
.php_grf_required = true,
.regs_valid = true,
.regs = {
0xfe1b0000, /* gmac0 */
Expand Down Expand Up @@ -1812,8 +1815,22 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,

bsp_priv->grf = syscon_regmap_lookup_by_phandle(dev->of_node,
"rockchip,grf");
bsp_priv->php_grf = syscon_regmap_lookup_by_phandle(dev->of_node,
"rockchip,php-grf");
if (IS_ERR(bsp_priv->grf)) {
dev_err_probe(dev, PTR_ERR(bsp_priv->grf),
"failed to lookup rockchip,grf\n");
return ERR_CAST(bsp_priv->grf);
}

if (ops->php_grf_required) {
bsp_priv->php_grf =
syscon_regmap_lookup_by_phandle(dev->of_node,
"rockchip,php-grf");
if (IS_ERR(bsp_priv->php_grf)) {
dev_err_probe(dev, PTR_ERR(bsp_priv->php_grf),
"failed to lookup rockchip,php-grf\n");
return ERR_CAST(bsp_priv->php_grf);
}
}

if (plat->phy_node) {
bsp_priv->integrated_phy = of_property_read_bool(plat->phy_node,
Expand Down

0 comments on commit 247e84f

Please sign in to comment.