From patchwork Fri Aug 16 22:35:58 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Wu X-Patchwork-Id: 267799 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7C5DA2C00BB for ; Sat, 17 Aug 2013 08:36:25 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755672Ab3HPWgF (ORCPT ); Fri, 16 Aug 2013 18:36:05 -0400 Received: from mail-ea0-f176.google.com ([209.85.215.176]:43172 "EHLO mail-ea0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755637Ab3HPWgD (ORCPT ); Fri, 16 Aug 2013 18:36:03 -0400 Received: by mail-ea0-f176.google.com with SMTP id q16so1236555ead.7 for ; Fri, 16 Aug 2013 15:36:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:user-agent:in-reply-to :references:mime-version:content-transfer-encoding:content-type; bh=YmG1uGfGq9pHZIZiHjRdFnlqe97TZPKHMcRa+DUn8Yk=; b=kbu5KBBnh2KZiom9KOSn5njmwW9CPD94AaPiahBIJHvYsYX5+jdYPKBc6bdsOmL6l+ AtrAYzG7cJmCHYy3OfAWUwyHB/+Kp1NSNgbkdgp1VgFAgjRE0wkRxtYiRY3zbdFhQo17 7buXLFgMLN9dV0Gk3+Picmdi0AVph+igdKGfTXAQDlT7tc9lGR68/5Qo0rbbRNXrXwtK k6I7cFn99sG5mw+0xrG04wSQK+rwfoNX4y7ScYVcd7cORCZEFSxJOtte3DaAnO5WXuZ4 cCqz7tXkH7Ma1+dDzG7ZAH2vVKIUiEUu8YihCyydyAe2aYaXUxtrxK0+vFcq3xeQXrk3 OZeA== X-Received: by 10.14.4.1 with SMTP id 1mr5357378eei.21.1376692562079; Fri, 16 Aug 2013 15:36:02 -0700 (PDT) Received: from al.localnet (al.lekensteyn.nl. [2001:470:1f15:b83::c0d1:f1ed]) by mx.google.com with ESMTPSA id l47sm5718976eex.15.1969.12.31.16.00.00 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 16 Aug 2013 15:36:01 -0700 (PDT) From: Peter Wu To: Francois Romieu Cc: netdev@vger.kernel.org, nic_swsd@realtek.com Subject: Re: [PATCH] r8169: fix invalid register dump Date: Sat, 17 Aug 2013 00:35:58 +0200 Message-ID: <8673892.63sYyivWik@al> User-Agent: KMail/4.10.5 (Linux/3.11.0-1-custom; KDE/4.10.5; x86_64; ; ) In-Reply-To: <20130814224736.GA5193@electric-eye.fr.zoreil.com> References: <1376426265-30353-1-git-send-email-lekensteyn@gmail.com> <2045708.ru9COLib4d@al> <20130814224736.GA5193@electric-eye.fr.zoreil.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Thursday 15 August 2013 00:47:36 Francois Romieu wrote: > Spartan implementation: > > u32 __iomem *ioaddr = tp->mmio_addr; > u32 *dw = p; > int i; > > ... > > for (i = regs->len; i > 0; i -= 4) > memcpy_fromio(dw++, ioaddr++, min(i, 4)); I like this one, simple and readable. I was worried about endianness issues, but that does not apply here as the source and destination are presumably in byte order. I have tested this patch with a modified ethtool[1]. [1]: http://www.spinics.net/lists/netdev/msg246364.html --- From: Peter Wu For some reason, my PCIe RTL8111E onboard NIC on a GA-Z68X-UD3H-B3 motherboard reads as FFs when reading from MMIO with a block size larger than 7. Therefore change to reading blocks of four bytes. Signed-off-by: Peter Wu --- drivers/net/ethernet/realtek/r8169.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index b5eb419..2943916 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -1897,12 +1897,16 @@ static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) { struct rtl8169_private *tp = netdev_priv(dev); + u32 __iomem *data = tp->mmio_addr; + u32 *dw = p; + int i; if (regs->len > R8169_REGS_SIZE) regs->len = R8169_REGS_SIZE; rtl_lock_work(tp); - memcpy_fromio(p, tp->mmio_addr, regs->len); + for (i = regs->len; i > 0; i -= 4) + memcpy_fromio(dw++, data++, min(4, i)); rtl_unlock_work(tp); }