lkml.org 
[lkml]   [2020]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 019/252] net: ethernet: ti: cpsw: fix cpts irq after suspend
    Date
    From: Grygorii Strashko <grygorii.strashko@ti.com>

    [ Upstream commit 2b5668733050fca85f0ab458c5b91732f9496a38 ]

    Depending on the SoC/platform the CPSW can completely lose context after a
    suspend/resume cycle, including CPSW wrapper (WR) which will cause reset of
    WR_C0_MISC_EN register, so CPTS IRQ will became disabled.

    Fix it by moving CPTS IRQ enabling in cpsw_ndo_open() where CPTS is
    actually started.

    Fixes: 84ea9c0a95d7 ("net: ethernet: ti: cpsw: enable cpts irq")
    Reported-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
    Tested-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20201112111546.20343-1-grygorii.strashko@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/ti/cpsw.c | 10 ++++++----
    drivers/net/ethernet/ti/cpsw_new.c | 9 ++++++---
    2 files changed, 12 insertions(+), 7 deletions(-)

    --- a/drivers/net/ethernet/ti/cpsw.c
    +++ b/drivers/net/ethernet/ti/cpsw.c
    @@ -838,9 +838,12 @@ static int cpsw_ndo_open(struct net_devi
    if (ret < 0)
    goto err_cleanup;

    - if (cpts_register(cpsw->cpts))
    - dev_err(priv->dev, "error registering cpts device\n");
    -
    + if (cpsw->cpts) {
    + if (cpts_register(cpsw->cpts))
    + dev_err(priv->dev, "error registering cpts device\n");
    + else
    + writel(0x10, &cpsw->wr_regs->misc_en);
    + }
    }

    cpsw_restore(priv);
    @@ -1722,7 +1725,6 @@ static int cpsw_probe(struct platform_de

    /* Enable misc CPTS evnt_pend IRQ */
    cpts_set_irqpoll(cpsw->cpts, false);
    - writel(0x10, &cpsw->wr_regs->misc_en);

    skip_cpts:
    cpsw_notice(priv, probe,
    --- a/drivers/net/ethernet/ti/cpsw_new.c
    +++ b/drivers/net/ethernet/ti/cpsw_new.c
    @@ -873,8 +873,12 @@ static int cpsw_ndo_open(struct net_devi
    if (ret < 0)
    goto err_cleanup;

    - if (cpts_register(cpsw->cpts))
    - dev_err(priv->dev, "error registering cpts device\n");
    + if (cpsw->cpts) {
    + if (cpts_register(cpsw->cpts))
    + dev_err(priv->dev, "error registering cpts device\n");
    + else
    + writel(0x10, &cpsw->wr_regs->misc_en);
    + }

    napi_enable(&cpsw->napi_rx);
    napi_enable(&cpsw->napi_tx);
    @@ -2009,7 +2013,6 @@ static int cpsw_probe(struct platform_de

    /* Enable misc CPTS evnt_pend IRQ */
    cpts_set_irqpoll(cpsw->cpts, false);
    - writel(0x10, &cpsw->wr_regs->misc_en);

    skip_cpts:
    ret = cpsw_register_notifiers(cpsw);

    \
     
     \ /
      Last update: 2020-11-23 14:09    [W:3.921 / U:1.680 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site