[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <01b501d95df4$9c4262a0$d4c727e0$@trustnetic.com>
Date: Fri, 24 Mar 2023 10:01:55 +0800
From: Jiawen Wu <jiawenwu@...stnetic.com>
To: <Steen.Hegelund@...rochip.com>, <netdev@...r.kernel.org>
Cc: <mengyuanlou@...-swift.com>
Subject: RE: [PATCH net] net: wangxun: Fix vector length of interrupt cause
On Thursday, March 23, 2023 6:50 PM, Steen.Hegelund@...rochip.com wrote:
>
> Hi Jiawen,
>
>
> On Wed Mar 22, 2023 at 11:36 AM CET, Jiawen Wu wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know
> > the content is safe
> >
> > There is 64-bit interrupt cause register for txgbe. Fix to clear upper
> > 32 bits.
> >
> > Fixes: 3f703186113f ("net: libwx: Add irq flow functions")
> > Signed-off-by: Jiawen Wu <jiawenwu@...stnetic.com>
> > ---
> > drivers/net/ethernet/wangxun/libwx/wx_type.h | 2 +-
> > drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 2 +-
> > drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 3 ++-
> > 3 files changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/wangxun/libwx/wx_type.h
> > b/drivers/net/ethernet/wangxun/libwx/wx_type.h
> > index 77d8d7f1707e..97e2c1e13b80 100644
> > --- a/drivers/net/ethernet/wangxun/libwx/wx_type.h
> > +++ b/drivers/net/ethernet/wangxun/libwx/wx_type.h
> > @@ -222,7 +222,7 @@
> > #define WX_PX_INTA 0x110
> > #define WX_PX_GPIE 0x118
> > #define WX_PX_GPIE_MODEL BIT(0)
> > -#define WX_PX_IC 0x120
> > +#define WX_PX_IC(_i) (0x120 + (_i) * 4)
> > #define WX_PX_IMS(_i) (0x140 + (_i) * 4)
> > #define WX_PX_IMC(_i) (0x150 + (_i) * 4)
> > #define WX_PX_ISB_ADDR_L 0x160
> > diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> > b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> > index 5b564d348c09..17412e5282de 100644
> > --- a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> > +++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> > @@ -352,7 +352,7 @@ static void ngbe_up(struct wx *wx)
> > netif_tx_start_all_queues(wx->netdev);
> >
> > /* clear any pending interrupts, may auto mask */
> > - rd32(wx, WX_PX_IC);
> > + rd32(wx, WX_PX_IC(0));
>
> Here you only clear irq 0 but not 1...
>
> > rd32(wx, WX_PX_MISC_IC);
> > ngbe_irq_enable(wx, true);
> > if (wx->gpio_ctrl)
> > diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> > b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> > index 6c0a98230557..a58ce5463686 100644
> > --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> > +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> > @@ -229,7 +229,8 @@ static void txgbe_up_complete(struct wx *wx)
> > wx_napi_enable_all(wx);
> >
> > /* clear any pending interrupts, may auto mask */
> > - rd32(wx, WX_PX_IC);
> > + rd32(wx, WX_PX_IC(0));
> > + rd32(wx, WX_PX_IC(1));
>
> Here you clear irq 0 and 1
>
> > rd32(wx, WX_PX_MISC_IC);
> > txgbe_irq_enable(wx, true);
> >
> > --
> > 2.27.0
>
> Why is there a difference between the two situations?
>
> BR
> Steen
There is two different chip with different hardware design.
The register WX_PX_IC has total 64 bits in its low and high registers, which names WX_PX_IC(0) and WX_PX_IC(1).
For txgbe, it's necessary to clear irq 0-63, but 0-8 for ngbe.
Powered by blists - more mailing lists