From patchwork Fri Aug 5 15:26:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Max Filippov X-Patchwork-Id: 656242 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3s5W0q1PwPz9t0F for ; Sat, 6 Aug 2016 01:28:27 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Xv0LDGyA; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 19CC3A753B; Fri, 5 Aug 2016 17:27:47 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2mJhAF5CTuDR; Fri, 5 Aug 2016 17:27:46 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3D092A7574; Fri, 5 Aug 2016 17:27:21 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 740884BABA for ; Fri, 5 Aug 2016 17:27:09 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id u40a5CpF526K for ; Fri, 5 Aug 2016 17:27:09 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-lf0-f66.google.com (mail-lf0-f66.google.com [209.85.215.66]) by theia.denx.de (Postfix) with ESMTPS id 610D34BA67 for ; Fri, 5 Aug 2016 17:27:02 +0200 (CEST) Received: by mail-lf0-f66.google.com with SMTP id f93so17028081lfi.0 for ; Fri, 05 Aug 2016 08:27: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:in-reply-to:references; bh=7f+wYrgqTjpHn37kFLSXpBfRuq+G/bXPTaGZsjn/WSg=; b=Xv0LDGyA4cLk/M8KUt8sQ7HNrIuw8jWvYwaNFU0QvfTsAFv/tG3m0oSskUwkeibYun 6x/smb0IJp0VKvcVmDYB0XoM/j0kYGnzBqwQ9OV2pV6ZI1Qun9Bw2vK2Y+A6q51bmKd4 6ygvzLEXB8Ts522jdOkrUDe4WHHLgPzbRbbw7ZixAxYrR4tQdJrcppoE/ejSR79QCYVb lnfrdBA8AZu+IXw8u56jUlow/wcXF+fDqHbZXT9Dn1vv8okhtS0zC6wyNw2EeuPfa04B 2RaKPemYAJ8mn7LDMWcNrT9ZZVH7CpT0xFeko10vOVZCOVseC92DnIFLRgaD2AqMT71S M8qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7f+wYrgqTjpHn37kFLSXpBfRuq+G/bXPTaGZsjn/WSg=; b=jpUFWpumC4m9vCBNRjoOz0qmJqmyqpIqc8geTKCbPmHbMrFJaYKNKhntvtygzimj8H 9voPggkMxhLbYqoyxtb8sm6iDIfC4W+oHrjgCNuAoNVKMx75kyC1IFr1RriZBdywUtK3 HrYzmMlHu5q27xNnpZJHkLNJb0nI53xWZeQ4b1aSHEDV8Kr68Bg21T6FXx/dblbA2EIF wABxw1RKzcfQRwNdOL5CqhXSptEL2H57X25Sxy3x7zKTjvOL8XbgYQqBIwKCbgJNBjsx 8ON0ScJnSkHOaIGvHoP/zTSu9SrAtYSVbHd/qEf8gKpi6CHU5Pf3JGDmUv/vUP1DHJLw tkkA== X-Gm-Message-State: AEkoouuHy2wF19ZlbvGFMuqk1u/wVcl2yOgi0Q8bnqEXJy2IS/rp5c1n4G4lO0QBU8Tf+w== X-Received: by 10.25.146.85 with SMTP id u82mr20428629lfd.222.1470410821679; Fri, 05 Aug 2016 08:27:01 -0700 (PDT) Received: from octofox.metropolis ([5.19.183.212]) by smtp.gmail.com with ESMTPSA id u11sm3211980lja.12.2016.08.05.08.27.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 Aug 2016 08:27:01 -0700 (PDT) From: Max Filippov To: u-boot@lists.denx.de Date: Fri, 5 Aug 2016 18:26:19 +0300 Message-Id: <1470410781-7944-6-git-send-email-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1470410781-7944-1-git-send-email-jcmvbkbc@gmail.com> References: <1470410781-7944-1-git-send-email-jcmvbkbc@gmail.com> Cc: Joe Hershberger Subject: [U-Boot] [PATCH v2 5/7] net/ethoc: don't mix virtual and physical addresses X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Addresses used in buffer descriptors and passed in platform data or device tree are physical. Addresses used by CPU to access packet data and registers are virtual. Don't mix these addresses and use virt_to_phys for translation. Signed-off-by: Max Filippov Acked-by: Joe Hershberger --- drivers/net/ethoc.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c index a5c4b46..198827f 100644 --- a/drivers/net/ethoc.c +++ b/drivers/net/ethoc.c @@ -255,6 +255,7 @@ static int ethoc_init_ring(struct ethoc *priv) /* setup transmission buffers */ bd.stat = TX_BD_IRQ | TX_BD_CRC; + bd.addr = 0; for (i = 0; i < priv->num_tx; i++) { if (i == priv->num_tx - 1) @@ -266,11 +267,12 @@ static int ethoc_init_ring(struct ethoc *priv) bd.stat = RX_BD_EMPTY | RX_BD_IRQ; for (i = 0; i < priv->num_rx; i++) { - bd.addr = (u32)net_rx_packets[i]; + bd.addr = virt_to_phys(net_rx_packets[i]); if (i == priv->num_rx - 1) bd.stat |= RX_BD_WRAP; - flush_dcache_range(bd.addr, bd.addr + PKTSIZE_ALIGN); + flush_dcache_range((ulong)net_rx_packets[i], + (ulong)net_rx_packets[i] + PKTSIZE_ALIGN); ethoc_write_bd(priv, priv->num_tx + i, &bd); } @@ -351,10 +353,10 @@ static int ethoc_update_rx_stats(struct ethoc_bd *bd) static int ethoc_rx_common(struct ethoc *priv, uchar **packetp) { - u32 entry; struct ethoc_bd bd; + u32 i = priv->cur_rx % priv->num_rx; + u32 entry = priv->num_tx + i; - entry = priv->num_tx + (priv->cur_rx % priv->num_rx); ethoc_read_bd(priv, entry, &bd); if (bd.stat & RX_BD_EMPTY) return -EAGAIN; @@ -365,7 +367,7 @@ static int ethoc_rx_common(struct ethoc *priv, uchar **packetp) int size = bd.stat >> 16; size -= 4; /* strip the CRC */ - *packetp = (void *)bd.addr; + *packetp = net_rx_packets[i]; return size; } else { return 0; @@ -428,9 +430,9 @@ static int ethoc_send_common(struct ethoc *priv, void *packet, int length) bd.stat |= TX_BD_PAD; else bd.stat &= ~TX_BD_PAD; - bd.addr = (u32)packet; + bd.addr = virt_to_phys(packet); - flush_dcache_range(bd.addr, bd.addr + length); + flush_dcache_range((ulong)packet, (ulong)packet + length); bd.stat &= ~(TX_BD_STATS | TX_BD_LEN_MASK); bd.stat |= TX_BD_LEN(length); ethoc_write_bd(priv, entry, &bd); @@ -463,14 +465,15 @@ static int ethoc_send_common(struct ethoc *priv, void *packet, int length) static int ethoc_free_pkt_common(struct ethoc *priv) { - u32 entry; struct ethoc_bd bd; + u32 i = priv->cur_rx % priv->num_rx; + u32 entry = priv->num_tx + i; - entry = priv->num_tx + (priv->cur_rx % priv->num_rx); ethoc_read_bd(priv, entry, &bd); /* clear the buffer descriptor so it can be reused */ - flush_dcache_range(bd.addr, bd.addr + PKTSIZE_ALIGN); + flush_dcache_range((ulong)net_rx_packets[i], + (ulong)net_rx_packets[i] + PKTSIZE_ALIGN); bd.stat &= ~RX_BD_STATS; bd.stat |= RX_BD_EMPTY; ethoc_write_bd(priv, entry, &bd);