Received: by 10.223.176.5 with SMTP id f5csp265595wra; Fri, 26 Jan 2018 22:57:35 -0800 (PST) X-Google-Smtp-Source: AH8x225tZdM5xdaIuVfHx0UAm/9xDa8hZeVzYsUGu+RpSQzHEFYbANxqS75O6jgRNiiqfjeHnGXA X-Received: by 10.98.246.8 with SMTP id x8mr21026871pfh.234.1517036255736; Fri, 26 Jan 2018 22:57:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517036255; cv=none; d=google.com; s=arc-20160816; b=nQUwbzcArnZ2m0npR7U3Jf4WIoYW3wnbt/vtml49SL9jpUwQvZdwZJ6/GCEKJ3qm54 MlsAz0uj4pc4jt9sQnxc3y3ZNVPJHZch2JQym+SykmJUzkTv2V0r9gGnYYBJSFZScCvX N9T6wNVN5xBPh8CcMpUaq/h+jhwTsem9MjKsBfVRWhDQtWRlDIT+/8GYNXaDjGRouxND 4C5i5YUhe9oYr/I4y5PSJyF8LWpP/fzNZHxTRMbrhSvliv/nTwYC9IMh7BQ3ZDinQmG2 RDzjQCWoIYcq9Gmm0vtvadhgP9lehrS1FGv6ihVP3v7GhfTzBHePQG65VLIumt5Vtaay tuHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=UNxmnAlZEiHuScDuphumA6x4+L8mRGFEYoXq9f3w1dA=; b=yAHo0pERB7a+aYOOX+2vOOTybosr0ofNpQsdbpkfhckuv4+hIIdNwh2n61q5/gBr8B /RNz58BvVfuyUrHovRjAQx9LCiPh/6wZ8OzMU5jnKNc3sne/uFGFXLgkCn1kx8QEmed4 pgtz+cusWrtmlW8Zf/MRfAZzeLwbtd/h27UDcQBbWKs6dM4upEnOUc+/8RNHHRIlOSlN YmnNpC7PlhJI0u6hiqhBZdxSEinTQCTjjIPQwDxYVfZeyKeA2Ty9XPr1rrS5jmACl0Im KhZbUsQLrXknnF4Vkp4iVHOE6LdWfAdOnGV3mFDzYSZ7eUe9kTCoMtA71ouOeFCdVgXq HvAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=n2ksvw0u; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u8-v6si4008754plm.97.2018.01.26.22.57.20; Fri, 26 Jan 2018 22:57:35 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=n2ksvw0u; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751719AbeA0G46 (ORCPT + 99 others); Sat, 27 Jan 2018 01:56:58 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:36031 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751311AbeA0G45 (ORCPT ); Sat, 27 Jan 2018 01:56:57 -0500 Received: by mail-qt0-f195.google.com with SMTP id z11so6784942qtm.3; Fri, 26 Jan 2018 22:56:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=UNxmnAlZEiHuScDuphumA6x4+L8mRGFEYoXq9f3w1dA=; b=n2ksvw0uNZFzGlR7Zyhq47yrjVUobbnfmttNk976vJn0Ispqg4Lmm/R5ityu+M0MCA RTA7cCZM+mkN8Paza+RALzFaw2sfxouG95tiO7m3ovsncwreipTlAk48KFpOiHz9hkcc Ou9TKMFnznP+00QrW6/SdaymgMBlRYZPkkLuZt8I4crnfoGU2S1OnbGK0sLAP7thdDQI yjuFSbBbpsnJlw8sJqwuHrBPVJlV1nPjGG98B9bRQqptxDJAW6b5hMUhcvnLBIsIj/IC MWr8nGBjg3C+6Vp/lItgi4yopMrkwf91yFqkEEx6sVycT3RdhSxrtdtEcSGWcYZcpCQt uFKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=UNxmnAlZEiHuScDuphumA6x4+L8mRGFEYoXq9f3w1dA=; b=LQXNrLcW9o0zkueiiy2UVNMsm2ixznpkFHyPPxQCk6soUINaMKRcndq9+b3VQmGlko ZEPd491KO1I8SypX79tjRZ41ncf6QQWzZqfbGX9xymGwx7pdksfnLbkho/ROeZUYXXe1 zXVl/UM/RRQivkSsvHiyhZrSlX2t1YWE/D/4x+FMyacuM0BM64qYMYlMkr7wrHSktlTN X81Ui0V8zkt6cWGIBiEYusy0ECU6nCO202+dkPTsLH9Buu9MHnGMDdH45Xt7TNNiJQZ5 qyPTnZPXPeLbZifd2Araw/f9eDFrJW1MZzETenwGvFzBnEYq73+INpEQSyNSL/iuLXKl 9IGQ== X-Gm-Message-State: AKwxyteVm8cy9zskmTYbKZlBeXaHhSCRMBYU2gT5uCUOTOacmdMdsjo7 c0gF70dHttQM56R0CA2hWtcQMyAVISNDCQC6xv4= X-Received: by 10.55.55.17 with SMTP id e17mr24686073qka.174.1517036216313; Fri, 26 Jan 2018 22:56:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.200.19.132 with HTTP; Fri, 26 Jan 2018 22:56:55 -0800 (PST) In-Reply-To: <1517035141-14565-1-git-send-email-harinikatakamlinux@gmail.com> References: <1517035141-14565-1-git-send-email-harinikatakamlinux@gmail.com> From: Harini Katakam Date: Sat, 27 Jan 2018 12:26:55 +0530 Message-ID: Subject: Re: [PATCH v3] net: macb: Handle HRESP error To: Nicolas Ferre , David Miller , Harini Katakam Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Harini Katakam , michals@xilinx.com, Harini Katakam , Michal Simek Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi David, On Sat, Jan 27, 2018 at 12:09 PM, wrote: > From: Harini Katakam > > Handle HRESP error by doing a SW reset of RX and TX and > re-initializing the descriptors, RX and TX queue pointers. > > Signed-off-by: Harini Katakam > Signed-off-by: Michal Simek > --- > v3 and v2 changes: > Fixed patch formatting errors > Rebased on latest net-next and reinitialized > multiple rx queues in error handling. > > drivers/net/ethernet/cadence/macb.h | 3 ++ > drivers/net/ethernet/cadence/macb_main.c | 59 +++++++++++++++++++++++++++++--- > 2 files changed, 58 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h > index c50c5ec..8665982 100644 > --- a/drivers/net/ethernet/cadence/macb.h > +++ b/drivers/net/ethernet/cadence/macb.h > @@ -13,6 +13,7 @@ > #include > #include > #include > +#include > > #if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) || defined(CONFIG_MACB_USE_HWSTAMP) > #define MACB_EXT_DESC > @@ -1200,6 +1201,8 @@ struct macb { > struct ethtool_rx_fs_list rx_fs_list; > spinlock_t rx_fs_lock; > unsigned int max_tuples; > + > + struct tasklet_struct hresp_err_tasklet; > }; > > #ifdef CONFIG_MACB_USE_HWSTAMP > diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c > index 234667e..e84afcf 100644 > --- a/drivers/net/ethernet/cadence/macb_main.c > +++ b/drivers/net/ethernet/cadence/macb_main.c > @@ -1258,6 +1258,57 @@ static int macb_poll(struct napi_struct *napi, int budget) > return work_done; > } > > +static void macb_hresp_error_task(unsigned long data) > +{ > + struct macb *bp = (struct macb *)data; > + struct net_device *dev = bp->dev; > + struct macb_queue *queue = bp->queues; > + unsigned int q; > + u32 ctrl; > + > + for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) { > + queue_writel(queue, IDR, MACB_RX_INT_FLAGS | > + MACB_TX_INT_FLAGS | > + MACB_BIT(HRESP)); > + } > + ctrl = macb_readl(bp, NCR); > + ctrl &= ~(MACB_BIT(RE) | MACB_BIT(TE)); > + macb_writel(bp, NCR, ctrl); > + > + netif_tx_stop_all_queues(dev); > + netif_carrier_off(dev); > + > + bp->macbgem_ops.mog_init_rings(bp); > + > + /* Initialize TX and RX buffers */ > + for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) { > + queue_writel(queue, RBQP, lower_32_bits(queue->rx_ring_dma)); > +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT > + if (bp->hw_dma_cap & HW_DMA_CAP_64B) > + queue_writel(queue, RBQPH, > + upper_32_bits(queue->rx_ring_dma)); > +#endif > + queue_writel(queue, TBQP, lower_32_bits(queue->tx_ring_dma)); > +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT > + if (bp->hw_dma_cap & HW_DMA_CAP_64B) > + queue_writel(queue, TBQPH, > + upper_32_bits(queue->tx_ring_dma)); > +#endif > + > + /* Enable interrupts */ > + queue_writel(queue, IER, > + MACB_RX_INT_FLAGS | > + MACB_TX_INT_FLAGS | > + MACB_BIT(HRESP)); > + } > + > + ctrl |= MACB_BIT(RE) | MACB_BIT(TE); > + macb_writel(bp, NCR, ctrl); > + > + netif_carrier_on(dev); > + netif_tx_start_all_queues(dev); > +} > + > static irqreturn_t macb_interrupt(int irq, void *dev_id) > { > struct macb_queue *queue = dev_id; > @@ -1347,10 +1398,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) > } > > if (status & MACB_BIT(HRESP)) { > - /* TODO: Reset the hardware, and maybe move the > - * netdev_err to a lower-priority context as well > - * (work queue?) > - */ > + tasklet_schedule(&bp->hresp_err_tasklet); > netdev_err(dev, "DMA bus error: HRESP not OK\n"); > > if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) > @@ -3937,6 +3985,9 @@ static int macb_probe(struct platform_device *pdev) > goto err_out_unregister_mdio; > } > > + tasklet_init(&bp->hresp_err_tasklet, macb_hresp_error_task, > + (unsigned long)bp); > + > phy_attached_info(phydev); > > netdev_info(dev, "Cadence %s rev 0x%08x at 0x%08lx irq %d (%pM)\n", > -- > 2.7.4 > Apologies for the spam. This is the v3. Please do let me know in case you still see any corruption. Regards, Harini