From patchwork Mon Nov 26 10:57:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siva Durga Prasad Paladugu X-Patchwork-Id: 1003125 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="jNHS+dhT"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 433P665fQJz9sNK for ; Mon, 26 Nov 2018 21:58:18 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id C3EF4C221E7; Mon, 26 Nov 2018 10:58:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAD_ENC_HEADER, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id A2B3EC21EF7; Mon, 26 Nov 2018 10:58:11 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 328C8C21ECC; Mon, 26 Nov 2018 10:58:11 +0000 (UTC) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-eopbgr740050.outbound.protection.outlook.com [40.107.74.50]) by lists.denx.de (Postfix) with ESMTPS id 9BDBFC21DF9 for ; Mon, 26 Nov 2018 10:58:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5AbIsH3KAuxMRLU7SrkIatm85430OmzhTEjwtMP9U4A=; b=jNHS+dhT+FvPnZ31/6T+zD1ihm0a7ExhNLwxxkeWnaE0s7BU8YKdsLWqMIVCjlzSk760nw9eiNoF7t3ZWF4bYQ9ppZg2Y/AZ2EaYl4V3zF6uSNL16sj2DuAwOOVz8s0w+7o1GpeU8lgzbhd9dhixGNmpwnVSjufmDutdCotdApE= Received: from MWHPR0201CA0100.namprd02.prod.outlook.com (2603:10b6:301:75::41) by DM6PR02MB4457.namprd02.prod.outlook.com (2603:10b6:5:29::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.14; Mon, 26 Nov 2018 10:58:09 +0000 Received: from CY1NAM02FT026.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e45::202) by MWHPR0201CA0100.outlook.office365.com (2603:10b6:301:75::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1361.14 via Frontend Transport; Mon, 26 Nov 2018 10:58:08 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; ni.com; dkim=none (message not signed) header.d=none; ni.com; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; Received: from xsj-pvapsmtpgw01 (149.199.60.83) by CY1NAM02FT026.mail.protection.outlook.com (10.152.75.157) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.1339.15 via Frontend Transport; Mon, 26 Nov 2018 10:58:08 +0000 Received: from unknown-38-66.xilinx.com ([149.199.38.66] helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1gREad-0007XT-VX; Mon, 26 Nov 2018 02:58:07 -0800 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1gREaY-0003V0-S0; Mon, 26 Nov 2018 02:58:02 -0800 Received: from xsj-pvapsmtp01 (xsj-mail.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id wAQAvvGg006833; Mon, 26 Nov 2018 02:57:57 -0800 Received: from [172.23.37.99] (helo=xhdsivadur40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1gREaS-0003RN-Ik; Mon, 26 Nov 2018 02:57:57 -0800 From: Siva Durga Prasad Paladugu To: Date: Mon, 26 Nov 2018 16:27:38 +0530 Message-ID: <1543229859-15003-1-git-send-email-siva.durga.paladugu@xilinx.com> X-Mailer: git-send-email 2.7.4 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23620.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(136003)(376002)(39860400002)(346002)(2980300002)(438002)(199004)(189003)(63266004)(5660300001)(106466001)(107886003)(50466002)(48376002)(106002)(36756003)(47776003)(7696005)(36386004)(478600001)(51416003)(2351001)(77096007)(126002)(2616005)(4326008)(16586007)(486006)(54906003)(426003)(2906002)(8936002)(81156014)(81166006)(8676002)(50226002)(336012)(186003)(6666004)(356004)(9786002)(6916009)(476003)(26005)(305945005)(316002)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR02MB4457; H:xsj-pvapsmtpgw01; FPR:; SPF:Pass; LANG:en; PTR:unknown-60-83.xilinx.com; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CY1NAM02FT026; 1:amovSdXeb/VHQRbMbAB8xy/a+Jz/ta/r+hs9dDiEmGbpYPwwjDN3+nxGW0BZ82FlyAkO24EcvkYGMUJO5syjWH+o+cZYI/oq4sKZbiu9Z9xXhKdbH+42YOuIzi8dQ6uq MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eab38684-5026-41ce-912c-08d6538e0cd6 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4608076)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060); SRVR:DM6PR02MB4457; X-Microsoft-Exchange-Diagnostics: 1; DM6PR02MB4457; 3:JL05BwrVYNjskAWsJrgQbxXH023TVwt3eQIl99XwRv1or0fpA5j132qn+h10/HqiALQjVScUOjVO9oyj60V1Bd5x0xGNn3Tn5CKwSk+M5BDZprVexSyZl6sEXV/coKzwaCGcXdyWrGw7PKquswCe0yBmlHknTkQv0ZdASXumdOrH6JPC9NZLq38gj28a2t4mxN6w0xb5Olvnu+K67ZTav2nJHKJOvIngyYEAa8ED2TJ/fmfVL955stmGzs++BS72EGQJ4AAx0s97YF6XMT0pcBsM/XYchYEyJCzzA1qtfmZl1lZB1tiDyKHca7fc7kQcjQl7ikxq+KLdz6ZS+jZRo1f61WIz5LSMfaJahNrJvgU=; 25:s2NFoJJpGLCjaR2Y8CU4BzAmzbQWomwsMD/zYPlAI3MVJOSAZK8doKqOD00QQSraYuLHA0REyb+mP02XrnO7CMRJbDDixMMwPhyqpwhOawhlK/YmCP0j9wMjnsX/ujOMcYIZpD6XAf032fbOWTmE5ViTvTrUsBO3tpCUleFWhocZe1eNgl+yoJFXgcsEC7LzMAJR3Hu9eUo1LZ6IFubk2z5v13yexGYkW4+rd7rXgk3jvHLx0R2348aw3weeOMiU5ieHu91n0taq283gDEOQjEu5B1aG9nK7e6ArcOawiP0LZd1cvcWaZhejc373ifdKX1Am1HRZTDaqeS79odboybjuwpZvLRMx70ye/Z63yRU= X-MS-TrafficTypeDiagnostic: DM6PR02MB4457: X-Microsoft-Exchange-Diagnostics: 1; DM6PR02MB4457; 31:gfpDwztqbwL1GAHO4IHW6QwfVoECgeGr/yOFelyIEIFQiSYnhk1un3glkDq1ZZXsarjzlEAvp8CAtHz2L4yLqCwpzG6q+sM60W4YZ+l9cds1UjduHI6j5BqiK0SCcDsk7/m3imj0R737ZOmoPXGvDCl0lWe4M5nORtdIYYQBzFdVDzSJ4rwHFxZ6WrYEIgIxrsJNJXGCUK8VpZWITznS93UP812eljY+OROqSnq5jC8=; 20:KlDDeuZfSaPmhULHuXklI+7YwILcmU1eBHLRLq3cb03E9waS826uZPv/PexNEacPH3ILPkr+Qt7NYe+C9fZQByG7fG/GQhbyovUnF1TVHU3YIrSJVkTeYb53Vr1TRWLiDzRtUifiIBet+FZgABh7fq3Ib4MMb1U/ptEqZFFq59HhABVOjOzIlPAQtbglEn5V/a5sZA9ssb9iwqWyKa4eQPejY5eBJZxzJe01yRHH6YsMOB3zbVoJMHI8039+bzkJdVw40ET6xn3ONm+LCEUA4PjvS48adEmpwbxHGcCxdfUahVkYwJogAAnSDO7OWw3bF3FY2S/96FTfnOgQTPIGqBujFF5bYN7Qe6p7fKF8SrGFE+OYv7fayKypA75ZiOTgvl+9TPXCgSSlqZKIxyrvm1PrKo12weAag5/63sElO2Hc9BIE20VZzMtAlJN+duY3TgysEw41fKqyyHgMA6v6R9j1ngoLUUlXISiL63OTs65StCyNM2yRFnIRM0g8DICF X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93004095)(3231443)(944501410)(52105112)(6055026)(148016)(149066)(150057)(6041310)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:DM6PR02MB4457; BCL:0; PCL:0; RULEID:; SRVR:DM6PR02MB4457; X-Microsoft-Exchange-Diagnostics: 1; DM6PR02MB4457; 4:gzb112MELasXErdWF0FXVAIf1KILxpwlvciEj0NtddY2WYYvmnjMeFVayTWCmTmIYR1sfkMRk7HfvfFOLW3LenswWuMUhKsXUvLJ38StAODFZKR+p1ltgQmy2mBh+v0OiPnmvz0OEDa5yMTS5xtoTvfc3uNkCT/cSNP5wVwO3WHuQ6mpDIvrBDUrZRnPRcG4w00fgon1FBoEwJXmOMThChqxlrLTeL3z7eqiWcv/SYMjFgJ/xp2+FhUiyU3+a/cfugxiH+kMckS1XYFronwL5g== X-Forefront-PRVS: 086831DFB4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM6PR02MB4457; 23:w4xsyhf3N3/leq1+4QylPHNtinHjecfeK1fdfkiXb?= SFRrr06Ye9T+Fzs3Lv819nyVV2SO+tT2SaYIP+7HzV/XQvV5KN6BPYwP6po21/WF/hdfD+Bq7A//86Z1ay6tlBJx5+BAQ44GZjyOHwNylgKcvcgu+7sV6BPpyGhFNPd0osofd4YoB4efCdXkFtpX2hBMBYj/bRiI+RhlOu2+ppodtX+khQ/UrBzRuV6yxuGXtAyFKz+hTgelbA4Krt6Aj43NxYHfDY1VNzbEjbU+Ng8qgBCAyZeqW5WvQ7wjLh+H54k6cKZGEdmsqZxcq6m2vamGps6ErQXCSE1mxa3c1neUZrDzm4qv44x5xSfQeWJauTkmpiJvAW6y+9IsZH5MbSXnkoV9/v4oKequA0ThA9GjOt/HroimLJK/UKW9tKza95u8gp8o6sfcTsZFWGFpfejRRaZHzBrHjeIw4QJKBvvdRuXIlZatS1+eJhvdNYOske6Kpx4301fSQVDhlF3z++2eG2X6uAD5oB4tODdHnqz7mZKR9/oaZLwom03kqmZiGIWb9lJSQtUzCt0uzRgNwCKwSKvdnvGnA5ZdbxK1Jv6vXNO6qFvWHseeHqnKvFERP/DCVEohrPBzmIk5uAdejj0/CvuJ1U5iJ85zWleiKnh1Za0RzWtjsu8dAzXHhoIqROspTpg9+roGiSZvhxdnsvID2InWa7p4dhgb7HziW0PCouORTUWxtj3U4+zYS9bqkJyug6WKv/xg60/ZiJwA0iSXUviXuJkZePG05YffRw/HMY/terLWbuNnU3JqCcsmrpOjHn7oW4W64nlkITJwXa9i/Ka1AqudkO5yLx3ZojyAPD2+n9CxFSWvUzIhcTIdZ0kJKo9wyPM50EVipFyKeT2NTfBxg64hS1iR8GOh5q20TZnfrfZbrMiRfH+G2C22UW15/ynoEzauxehtdqH+shK9BdZbCG3sEHgfj0UGQxznocnsEXXxUWw7Y86KWgvcLfZt+oMLJsUEmAAfdu3PMjBsZtUipPOPwP3im1eeEHhQ1w+XK8asCu8Xd4rv/wz5To= X-Microsoft-Antispam-Message-Info: 8PvByMX/z6cblFywrRDPS44edZ/luB1Lzz9ip697C0ttAwwjMtgDYs1LNVrtUe6Wo78dRgxZ+YEukYn5bMm8AcDc9T2EK15ZRklhfYPCMFgQYVM3ZQMSPM1JIc9HYxB+W7VwegT8L9+fdLA9ZMiJCqobaVCEzOr2A1qrW+p6xNJvjl58fobcgDxcCxY6TrHFN4yauo86VI7Av0RJKun2i4OPhIzK3FbZ16K6RHNxcTcDPzN2S4c3MhWqVdUSmsVhJc1Md4QdUhdQXQdnz+YMnfUw3jhbbiuxCN0D/08ibsnaTw+w+HUWfk05PgQv4mTtKO2T+4Ou45Djrcq6zR8XgHv4wgRIdo+B57sqRZVMhSM= X-Microsoft-Exchange-Diagnostics: 1; DM6PR02MB4457; 6:2P7Y4ReK7TrPY6LdIViVf+WZxnOoNOtfwfw44HzMNvp8X3EstvlnAKJ1/WrH0rYCZHYsDfduQy3GrPB9ZCg7bIthfg9eSYX9pG2wPdqfbfs7S9Oye/1TEtgpCBhZYrjjAdgY8QlbMYUlWIjGKCVGqsKLGSVJsYUETUPZDwGczNe1MZh3O00AKwsx+7KGA5mgBWkQNoKTwGbqVT7LSyur8pvt9gp5EsGlwvQsj7NpmkGlc8Pen0M6y0bwfUkUfAnyGLJhBhjgHC8cBY5PRYuUfnr1gVljb4yJLNCl4BIH2lMXawl8XMGGB85oxmHNiNAhlj2IUp3jIb+1XUIWgYsx2q0O11g1qJDkO423Wz8SUdsYKt25hxnRNiU65JkQBCiOo8/aJIRFNsTzsRSKRUPMxci/cckOCjcvqkl+jwsRm7WyuyFWvbNG6WKlHJD2lfW+ywN6V9gCJeUgi24fqU0ggQ==; 5:xN1Ll/a3NjsuB4QA3ksVhDz+Blqlbc69sl/6TT0mZ590FhMR8PXDN5K/bUDddIFue6glwR9HxM0k11gaSX0c5xgHOvmFQZz43fqp/7Z1bs+elH9Ot+Xw1SqWrqpyj/KYH57VwGts6w02BrTb6JkuJ+VsEv6MI2qLQuKKMf9ClJg=; 7:nnvUXZcR+9X7MvrJGa+zYX65Klq9sRyhoVU6O+7JlUBi8NQwMGdGjtuEeTNJ4vHbZnt9JPie6ldLdYxJA4xwF+aswjkf153jgKZVAL6YEFANdQ3bMWBZ919fGECbQHsyMdAE1LPwIPvXBlTDRxToMA== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Nov 2018 10:58:08.3166 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eab38684-5026-41ce-912c-08d6538e0cd6 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB4457 Cc: joe.hershberger@ni.com, Vipul Kumar , Michal Simek Subject: [U-Boot] [PATCH 1/2] net: zynq_gem: Added 64-bit addressing support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Vipul Kumar This patch adds 64-bit addressing support for zynq gem. This means it can perform send and receive operations on 64-bit address buffers. Signed-off-by: Vipul Kumar Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- drivers/net/zynq_gem.c | 63 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c index bc33126..ee528db 100644 --- a/drivers/net/zynq_gem.c +++ b/drivers/net/zynq_gem.c @@ -86,10 +86,17 @@ DECLARE_GLOBAL_DATA_PTR; /* Set with binary 00011000 to use 1536 byte(1*max length frame/buffer) */ #define ZYNQ_GEM_DMACR_RXBUF 0x00180000 +#if defined(CONFIG_PHYS_64BIT) +# define ZYNQ_GEM_DMA_BUS_WIDTH BIT(30) /* 64 bit bus */ +#else +# define ZYNQ_GEM_DMA_BUS_WIDTH (0 << 30) /* 32 bit bus */ +#endif + #define ZYNQ_GEM_DMACR_INIT (ZYNQ_GEM_DMACR_BLENGTH | \ ZYNQ_GEM_DMACR_RXSIZE | \ ZYNQ_GEM_DMACR_TXSIZE | \ - ZYNQ_GEM_DMACR_RXBUF) + ZYNQ_GEM_DMACR_RXBUF | \ + ZYNQ_GEM_DMA_BUS_WIDTH) #define ZYNQ_GEM_TSR_DONE 0x00000020 /* Tx done mask */ @@ -147,12 +154,20 @@ struct zynq_gem_regs { u32 transmit_q1_ptr; /* 0x440 - Transmit priority queue 1 */ u32 reserved8[15]; u32 receive_q1_ptr; /* 0x480 - Receive priority queue 1 */ + u32 reserved10[17]; + u32 upper_txqbase; /* 0x4C8 - Upper tx_q base addr */ + u32 reserved11[2]; + u32 upper_rxqbase; /* 0x4D4 - Upper rx_q base addr */ }; /* BD descriptors */ struct emac_bd { u32 addr; /* Next descriptor pointer */ u32 status; +#if defined(CONFIG_PHYS_64BIT) + u32 addr_hi; + u32 reserved; +#endif }; #define RX_BUF 32 @@ -390,13 +405,21 @@ static int zynq_gem_init(struct udevice *dev) for (i = 0; i < RX_BUF; i++) { priv->rx_bd[i].status = 0xF0000000; priv->rx_bd[i].addr = - ((ulong)(priv->rxbuffers) + - (i * PKTSIZE_ALIGN)); - } + (lower_32_bits((ulong)(priv->rxbuffers) + + (i * PKTSIZE_ALIGN))); +#if defined(CONFIG_PHYS_64BIT) + priv->rx_bd[i].addr_hi = + (upper_32_bits((ulong)(priv->rxbuffers) + + (i * PKTSIZE_ALIGN))); +#endif + } /* WRAP bit to last BD */ priv->rx_bd[--i].addr |= ZYNQ_GEM_RXBUF_WRAP_MASK; /* Write RxBDs to IP */ - writel((ulong)priv->rx_bd, ®s->rxqbase); + writel(lower_32_bits((ulong)priv->rx_bd), ®s->rxqbase); +#if defined(CONFIG_PHYS_64BIT) + writel(upper_32_bits((ulong)priv->rx_bd), ®s->upper_rxqbase); +#endif /* Setup for DMA Configuration register */ writel(ZYNQ_GEM_DMACR_INIT, ®s->dmacr); @@ -406,12 +429,18 @@ static int zynq_gem_init(struct udevice *dev) /* Disable the second priority queue */ dummy_tx_bd->addr = 0; +#if defined(CONFIG_PHYS_64BIT) + dummy_tx_bd->addr_hi = 0; +#endif dummy_tx_bd->status = ZYNQ_GEM_TXBUF_WRAP_MASK | ZYNQ_GEM_TXBUF_LAST_MASK| ZYNQ_GEM_TXBUF_USED_MASK; dummy_rx_bd->addr = ZYNQ_GEM_RXBUF_WRAP_MASK | ZYNQ_GEM_RXBUF_NEW_MASK; +#if defined(CONFIG_PHYS_64BIT) + dummy_rx_bd->addr_hi = 0; +#endif dummy_rx_bd->status = 0; writel((ulong)dummy_tx_bd, ®s->transmit_q1_ptr); @@ -485,7 +514,8 @@ static int zynq_gem_init(struct udevice *dev) static int zynq_gem_send(struct udevice *dev, void *ptr, int len) { - u32 addr, size; + dma_addr_t addr; + u32 size; struct zynq_gem_priv *priv = dev_get_priv(dev); struct zynq_gem_regs *regs = priv->iobase; struct emac_bd *current_bd = &priv->tx_bd[1]; @@ -493,17 +523,26 @@ static int zynq_gem_send(struct udevice *dev, void *ptr, int len) /* Setup Tx BD */ memset(priv->tx_bd, 0, sizeof(struct emac_bd)); - priv->tx_bd->addr = (ulong)ptr; + priv->tx_bd->addr = lower_32_bits((ulong)ptr); +#if defined(CONFIG_PHYS_64BIT) + priv->tx_bd->addr_hi = upper_32_bits((ulong)ptr); +#endif priv->tx_bd->status = (len & ZYNQ_GEM_TXBUF_FRMLEN_MASK) | ZYNQ_GEM_TXBUF_LAST_MASK; /* Dummy descriptor to mark it as the last in descriptor chain */ current_bd->addr = 0x0; +#if defined(CONFIG_PHYS_64BIT) + current_bd->addr_hi = 0x0; +#endif current_bd->status = ZYNQ_GEM_TXBUF_WRAP_MASK | ZYNQ_GEM_TXBUF_LAST_MASK| ZYNQ_GEM_TXBUF_USED_MASK; /* setup BD */ - writel((ulong)priv->tx_bd, ®s->txqbase); + writel(lower_32_bits((ulong)priv->tx_bd), ®s->txqbase); +#if defined(CONFIG_PHYS_64BIT) + writel(upper_32_bits((ulong)priv->tx_bd), ®s->upper_txqbase); +#endif addr = (ulong) ptr; addr &= ~(ARCH_DMA_MINALIGN - 1); @@ -531,7 +570,7 @@ static int zynq_gem_send(struct udevice *dev, void *ptr, int len) static int zynq_gem_recv(struct udevice *dev, int flags, uchar **packetp) { int frame_len; - u32 addr; + dma_addr_t addr; struct zynq_gem_priv *priv = dev_get_priv(dev); struct emac_bd *current_bd = &priv->rx_bd[priv->rxbd_current]; @@ -550,8 +589,14 @@ static int zynq_gem_recv(struct udevice *dev, int flags, uchar **packetp) return -1; } +#if defined(CONFIG_PHYS_64BIT) + addr = (dma_addr_t)((current_bd->addr & ZYNQ_GEM_RXBUF_ADD_MASK) + | ((dma_addr_t)current_bd->addr_hi << 32)); +#else addr = current_bd->addr & ZYNQ_GEM_RXBUF_ADD_MASK; +#endif addr &= ~(ARCH_DMA_MINALIGN - 1); + *packetp = (uchar *)(uintptr_t)addr; return frame_len;