summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorLech Perczak <lech.perczak@gmail.com>2023-12-15 17:25:05 +0100
committerHauke Mehrtens <hauke@hauke-m.de>2024-01-02 22:00:20 +0100
commitf393ffcac163926bf9dbbda47c25cc7809952609 (patch)
tree8b28ef8f506be3cbb626c714b2dfd268e39d7028 /target
parentf87b66507e9245e6e02dbc76e2e7b27c9e0bf364 (diff)
downloadopenwrt-f393ffcac163926bf9dbbda47c25cc7809952609.tar.gz
openwrt-f393ffcac163926bf9dbbda47c25cc7809952609.tar.bz2
openwrt-f393ffcac163926bf9dbbda47c25cc7809952609.zip
raimps: mtk_eth_soc: drop rst_esw from ESW driver
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: 60fadae62b64 ("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>
Diffstat (limited to 'target')
-rw-r--r--target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c24
1 files changed, 4 insertions, 20 deletions
diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c
index 47471eb197..5a36652a11 100644
--- a/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c
+++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3050.c
@@ -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;
};
@@ -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)
@@ -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);
@@ -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);