Skip to content

Commit

Permalink
raimps: mtk_eth_soc: drop rst_esw from ESW driver
Browse files Browse the repository at this point in the history
The ESW core needs to be reset together with FE core, so after the
relevant reset controller lines are moved under FE, drop rst_esw and all
related code, which would not execute anyway, because rst_esw would be
NULL. While at that, ensure that if reset line for EPHY cannot be
claimed, a proper error message is reported.

Fixes: 60fadae ("ramips: ethernet: ralink: move reset of the esw into the esw instead of fe")

Co-developed-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
Signed-off-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>

[Split out of the bigger commit, provide commit mesage, refactor error
handling]
Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
  • Loading branch information
Leo-PL committed Jan 2, 2024
1 parent e69f7c1 commit 1d02282
Showing 1 changed file with 4 additions and 20 deletions.
24 changes: 4 additions & 20 deletions target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,6 @@ struct rt305x_esw {
int led_frequency;
struct esw_vlan vlans[RT305X_ESW_NUM_VLANS];
struct esw_port ports[RT305X_ESW_NUM_PORTS];
struct reset_control *rst_esw;
struct reset_control *rst_ephy;

};
Expand All @@ -261,18 +260,6 @@ static inline void esw_rmw_raw(struct rt305x_esw *esw, unsigned reg,
__raw_writel(t | val, esw->base + reg);
}

static void esw_reset(struct rt305x_esw *esw)
{
if (!esw->rst_esw)
return;

reset_control_assert(esw->rst_esw);
usleep_range(60, 120);
reset_control_deassert(esw->rst_esw);
/* the esw takes long to reset otherwise the board hang */
msleep(10);
}

static void esw_reset_ephy(struct rt305x_esw *esw)
{
if (!esw->rst_ephy)
Expand Down Expand Up @@ -466,8 +453,6 @@ static void esw_hw_init(struct rt305x_esw *esw)
u8 port_disable = 0;
u8 port_map = RT305X_ESW_PMAP_LLLLLL;

esw_reset(esw);

/* vodoo from original driver */
esw_w32(esw, 0xC8A07850, RT305X_ESW_REG_FCT0);
esw_w32(esw, 0x00000000, RT305X_ESW_REG_SGC2);
Expand Down Expand Up @@ -1441,12 +1426,11 @@ static int esw_probe(struct platform_device *pdev)
if (reg_init)
esw->reg_led_source = be32_to_cpu(*reg_init);

esw->rst_esw = devm_reset_control_get(&pdev->dev, "esw");
if (IS_ERR(esw->rst_esw))
esw->rst_esw = NULL;
esw->rst_ephy = devm_reset_control_get(&pdev->dev, "ephy");
if (IS_ERR(esw->rst_ephy))
esw->rst_ephy = devm_reset_control_get_exclusive(&pdev->dev, "ephy");
if (IS_ERR(esw->rst_ephy)) {
dev_err(esw->dev, "failed to get EPHY reset: %pe\n", esw->rst_ephy);
esw->rst_ephy = NULL;
}

spin_lock_init(&esw->reg_rw_lock);
platform_set_drvdata(pdev, esw);
Expand Down

0 comments on commit 1d02282

Please sign in to comment.