net: stmmac: dwmac-rk: Validate GRF and peripheral GRF during probe
[ Upstream commit 247e84f66a3d1946193d739fec5dc3d69833fd00 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ae22452d15
commit
f933879c5b
@@ -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[];
|
||||
};
|
||||
@@ -1263,6 +1264,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 */
|
||||
@@ -1410,6 +1412,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 */
|
||||
@@ -1830,8 +1833,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,
|
||||
|
||||
Reference in New Issue
Block a user