From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752653AbcHIIWp (ORCPT ); Tue, 9 Aug 2016 04:22:45 -0400 Received: from mail-bl2nam02on0069.outbound.protection.outlook.com ([104.47.38.69]:64096 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752208AbcHIIWk (ORCPT ); Tue, 9 Aug 2016 04:22:40 -0400 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; From: Harini Katakam To: , , CC: , , , , , Subject: [PATCH] net: macb: Add 64 bit addressing support for GEM Date: Tue, 9 Aug 2016 13:15:53 +0530 Message-ID: <1470728753-12985-1-git-send-email-harinik@xilinx.com> X-Mailer: git-send-email 2.1.1 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22502.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.100;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(199003)(189002)(7846002)(50986999)(77096005)(5003940100001)(7696003)(356003)(305945005)(19580405001)(8936002)(81156014)(2906002)(4326007)(8676002)(4001430100002)(19580395003)(36386004)(586003)(5001770100001)(81166006)(2201001)(63266004)(9786002)(86362001)(36756003)(47776003)(33646002)(92566002)(50226002)(87936001)(48376002)(50466002)(575784001)(229853001)(107886002)(106466001)(189998001)(107986001)(5001870100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BL2NAM02HT004;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT058;1:/wAb0Es+2YzBOd++nyKiwcV1umC+2YrCbAKOCKonJSib2MsYbXHm0ZUgYsurljdxjB0N2SR12Hg/1BHdxP2wRFY0cQV+t/9YRIbVD1OWbCSJMvLi3hXJ1pPM7fdiFM3py7pDqJQteF0vYWXMksjRchDxHTwwgLhJ047A3emq1IXTXKJ7c8JNuzA+0u0Dm4OkPeBnXb5RORi3zNOebkiILaUax4G71UuHemkKmBGQtbhH2lCk5F4eHFaaqPbdyxHGsd7A07VvDPC5DsX1kNjcZDqxyhR78Vx+AKM9Fe7vLy1e26TMkQ7Z2nxAcBon+XEYsmyCEryLLcMsRlPctXOlc9OiQwB+MiO+O36fkwiX/C2I4jfpZ35RpPvdF6gTnFuOxFZA7Ti21zWGk2SRm+Zsn59/GKLFfbdiq8vEBIxg2kUBTqdWEMlz+zLaW99+0qf38o2XwCh/rVkwvkql/XKgNr8/Zr2lhpP5zRo+gZXUTDLU5BXWWf4OB+EkGZXUTqQerz9LKvj2RpYJZ8iGyKNnXZpl6M57H1Kj3GTZX/Prkvqlzc694cqPfN39EP6XUaSeIax7GMfD4l3gcFBW1pac6OPqxS3SsXrgZ+8yccXhpmg= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 5418b398-8d75-4f2a-bc68-08d3c02937ae X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT004;2:zRnjjGy1YL2pGTF7/mooNnUzNarU4Bnvotmul5yOWGynkAw8yhzTS5Vd0LTVDJ3cqBZkjJDOiEIFYOg40FXDJzV+36xr8xgd87oscA7yZxS3wQyVW5WCQbE0POSlKifV7k/7PULGnWJuqMNALb4N1i7gCAXw5Cbqu7cxByNCyHpC7SLMuolSAGJWYL9shK8A;3:S6tH1jX1xASQFJnIB0ewcXHSo+EfWIlogA9cds5RSeuO7YS//R5/oUpfgNZftrdzBKlEuPfqXyZxMkystZyj35umk+yukVquLQGsGZ87SyK8N71IaaXVxzNYceI9K74rC/dBv08AKq7UTpxZNWYjnm9ruhv+ncKFUyIrOvZVwcRmAA6AaFTeLPVMo0qEqNAjSCSERbsgh6IFX5ouAaTjlge5P62Ee9Bw15glfYoWUTpUgHO6vwJecpihtku9qZUZeZU7He9pm1LsVsPAAsMIkQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BL2NAM02HT004; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT004;25:IEp5Hg+xKKKfUBnNv0t9gv8iU9f4uxH/8oYFxI5QDEgVSQwbOSZtem4TYr2pEIRN09BmzqVEysIQHdq+CcAhoBch/ZDRQ7aaba5ahuREtyXfKiaCWi30FXb5CS0yLxTB+A5pTetbFuh/rnPTNocGSFLOoC6mw8XMvHm9HPL/D9qgmjh3eA84aOGLFqx6cm7XA9qY7PZeeICiT3eGePHdwCc/lVCFUXu6gz7Kl30j3vRJAT/zOZo7WbMugs3WMPd00rt4V54RheYCPTWi5lPnzozb1rWb/zKnxWCfLWZO52MAlEiGqWjgWhwLK3pTT25OUzlRd5lF5pDvn0AtEbernQMh5aDvBQFMe29PQeHfbH8jgTK9610inourF2giq/GgTbZZRzaLYwsEFaVUvgtOlD5JQR2yzYk85+PaiXhL8bJlwtqMBvxx7lyJqdq8ANYHoshwxh+GxsXcQnmOQTxyKWoQYFsks7mhQjaRrGmh1TrqUljGPOYA3bu5P5sa20P6mzWl1NxC6SpSMTmpP5C6Tzt2647WeDXANKtaADmO4XbYXN1sitIEndYzhP7uL9RR2dmpVkZvPLWP3O16UP9UJyTNzeXBpZ7fJMITJMXOsgLZ6SIbxvT0xjTdS+n1z7QaZHKjNR8R9FX5khhExeDZG+Ko+27munRI8HcwY8d6ACb2jceUAllm3DxgvJcC40pouZok69U2tyh3peGr2bg5o1PB5B/k3f48vQYHQ/44XTl2N/4Eg3bs/RvjMfiIRtXtrwgkRkHjpU2RUnuhrmdbHQ== X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT004;31:NnnC2uJIlIDQSS2kHqbjt6hN1xX0U4M8VP7e7bj8FuXPXxriwX2HhhMw+ZLmY0ol/+OE6hOT5WTGLUx3n6WuP76oCtX8oi8D5QnERcd0WzWuatcJW7+TEhSy2yPFH41UyfWohJ/quraa0dL682+nVsmp1XOnt+2UvRA0b8itj2KFkrOR+xoDHFLN2vtNsWUUi2v/MWAR25gUmb427o0ypmmg50n7+crzWwN5nSnV/vg=;20:QU/pH5XyoHlChGWLuEnLvF0JPjClREofx+93OKq5erhDWSqS+9EpdQUmN/G3qjxWnzwFr7pOyxlZV/0QRr+3dDVVyFMa8wKJCOTBpyB9QPThGLGAoz1Bp7Vr1eeBctxYjKZifyBWn+8JB3lLMUUs2e1+GAOMam+elWvr/g8Xbxtk/ndDtG7IaKx57o2aFh38leWMyXFlB1zIUn/iS0gGImj5j6mq83ZQLI1qVRpoJ8nEH+FU9OZ8r5jvXD1dK9h1Ceahj/umt+Y+gw70uF+Z2cOw9IC5lNNJURNmWTKVEbpGTNIoW8zFendfPWjkjBmGYRuU9wpC9cwh/SXNdZKGrvJAq9wF7jJI9vvU8egmJ8XKgUsZhSobL9X2jhvXO4w6TgF2batNRGSFnDIrXU1Egrwu7V73+znkkEiXEwl9CG3g9Oo/z4wXr0kO/YPi3Td4QWedl6Pm+H+PAyyjp9VJjX6plkpaROJgSVUitia5PcmjTM2w8pJtP0dhJ2xq7oPX X-Microsoft-Antispam-PRVS: <92a48fce7635426ebceeb02f6baa1dae@BL2NAM02HT004.eop-nam02.prod.protection.outlook.com> X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040161)(601004)(2401047)(5005006)(13018025)(8121501046)(13024025)(13017025)(13015025)(13023025)(10201501046)(3002001)(6055026);SRVR:BL2NAM02HT004;BCL:0;PCL:0;RULEID:;SRVR:BL2NAM02HT004; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT004;4:JZB35X7Tj2oC4efS7w0oXLIICnHewl6tNEWvdFwSemyHT+9tSTxpedSXDx6Xagr5P+xiGQHRUsswR8zwMO2wJknJfqIBwnT3ujjomYuQXmNpenL0NjbjGPtWs6L67giTxYhnzStPVGp+8at4hAEu9XGkL74MWCGR0+Gqa2Ty238vL2JhIAzLbfLx+1nJKqpxDGnzQ7aBvQEF9hFysqQRTdsyh7vThPOXbHteO2JuHhYgz0fs2VIt8ORR9Vs9x2oBurWz7pR1Qj5Yrjs+FwOk2s2vGBoFm6Ib/ytSGtByFssGpL1EvqB2E742aApw5iEJKBYtwCTcKpET9sPQ0KHPqy5KqsHPy/q029cx48Y/qUdZpRZ+WLu+rImxEgM3ys1IarFrfbwWhL57nFegFkTm4t59lrjfAcvYFYPBw96gi6HV/QBvp2pcJHYvdJ5BNqA8xB6BUAHZzTn7R0aUl6CVLL/937Ry15RtxdEhoQTbmRHLIe1C4b7eD/pfQqlWPojCANQDna0olEafpOFFI8kCoI95UjjK8e6aFSzGXQOoXWg= X-Forefront-PRVS: 0029F17A3F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2NAM02HT004;23:XQZxlVG3a6hd2kBl5YhiURuTrW3DYp7g0EvhIksDH?= =?us-ascii?Q?wRMmL8bQ5ndJqT/309xG2/JH2V61PV1x2/p8iX8IP8Pb8DBFUEe77VlxBKOn?= =?us-ascii?Q?YhMzvmWiSXbutmLrDM8K+4Q+kslsk7fQiQ8AosNAk5Y3MK6U3X3OJObdAAQq?= =?us-ascii?Q?fPRcdkNyy3MWJ8bpOSUJv2OthKSRFbvvZBbbZN1U8+5iLLjJ63ac4tuf0ZGH?= =?us-ascii?Q?KrV7KEmjBG2PoztDJhK5JNuQTDIcVN8FDFeshmxt2uI25w5QlAevuSbyZSGf?= =?us-ascii?Q?1mjL+lnmzmO70kxNfAY/WqKVaOrC3yXEvLregk+OPBePF5TnVHEm6QUvQ5YH?= =?us-ascii?Q?y/uGhF8GRIF7YYIB9m2PfepA11iCA/qeJ4swtbBYMY8urQ9jUP18p55jzjaQ?= =?us-ascii?Q?RvtTX977BtHf8327r6T0K0JR/2gZQLbk1Ovwvae3NNvHpQxwMw9I8s4dGoy9?= =?us-ascii?Q?sOFAzoT8Aqnw6PdB4GeHY/c2zklJd6d5J2whJu3VRcfFbD7U3AyZtsV9RxDf?= =?us-ascii?Q?VbjmA8hUZQNZIE4LgrgxtxFm7ldM79iCQEy8vLX7AOh/ZYk/6Q8dooQx47pu?= =?us-ascii?Q?tIc/HW0B0uoig3d/zqrpkaiGkq0gTLdljj63cVFT4zc20Z2lh9apWuO7sg84?= =?us-ascii?Q?kmyWAl0UqWvFKwbINMasG4ncQoNplMjy9jCo1I/R+tWC1hsE2B2HQpJNtHb2?= =?us-ascii?Q?1QKOAVvxHq710PFVCRsTdco+zMrFNADTLbpk8AzM2QzAz/kRzylzVyeUuXkx?= =?us-ascii?Q?J+uVpuSK6TIuYVEkU3bQQowI1QXbQCvUEau2Or7rPXDcNnMxTn7NL0wPe3h/?= =?us-ascii?Q?8JQLsxAnRcAsSp97JavATct7Oka/B/mc801kGEDgbk+tkWAJrDeCineZUS9V?= =?us-ascii?Q?tQaG30zeqjWTV9ruMqVytjbt2oTjdLssW4OpuNp3r7SrVCvq+Gz9icuKaWBX?= =?us-ascii?Q?jInpjHitsl1iZQ6F8eFcmy1cIYZ/AuqSPN772mJ78axr6gG5NgpTD0cHKnBX?= =?us-ascii?Q?FWqtgwStGPF0OiStlzIrThkGILHbDBuA4AYsgWbwat4IEmvJJr13AesC0Fzd?= =?us-ascii?Q?hLVLG8II6SGVx3q8tkYw0gmda7jeDER5o6i5cgfaQyezRLFZu132G/KeVI5t?= =?us-ascii?Q?zfGxE89uQM=3D?= X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT004;6:tpWXJ+dnTTWYWvfEQrhOCzpjkWgA29clCMfCGrH9Lcc8dXhXgbkVfswWCXxJA+Q6mC1F6z5A8G0gByoJBU352enP4UtYLryVvNBhnmkwiKxm84I9jt/HkzlixK/HkviEHTj9lLQghIJfew+za6RhNhk+xTgVbQdIFh043/XDHWqxM9CpaOehsA7tEnCUcDNHr/VfLrHp/zkmataCMPKhxjfK3LzL5b5ywQLhyhT42p2/9lwZgd44g6oC14uzMAwq8NKYr0/7DrJk/QUHHSBbew3t6eiQ06eAF7tXp7UYPhFoG7sZNgTql/8wyZ8x77lFzPDwLdgQH7SKgg5bBDEAeQ==;5:my33BxzyKEbHmR8PK4j1Ul+OP4btOSDk9ek2WRswcUslFFj87UWwAWjJ9SJ7vsXDn82QOnmg8+L6ETkS9ioSA0oq03pZIClxReHNYY768D2AVevUe9DpRyaBSwz5Rf0co2oaWpix0ZWuxFUJImtpaw==;24:hmby1croIy/Q/6ITw1TwoIvFF5MNx31fnpEpdHjj4CM4cFBMSatODbnlwLiDRoh7mMJRHrOLpUsewnq9Zz3olSL34zCsanLS7+NCtHlgxY4=;7:7xMf+kUJxavfnzWrtq6b9v5KRq/vLhUAvUhRgj0rdIy0ZxJwJKNv546GYEmU+kDaTAnL8xMPCaYOtSzJO9Mt6mWcX/gE1o3l/dcbjAJ95L8OdbWTAmmC2Ae8dIfZ31mlqT2jlxtI1kFoK47Ql+OBirFp0eIwBMfNNiEHJzvZp17xymxfe9ipvciw0F8lGXgQqkIWpJoK5aUoR+74vl/7VLLD1vxYb7eeJefe3PJeypaZ7ZjfQmV2ZP3GaarU1PRt SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2016 07:46:04.7262 (UTC) 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.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2NAM02HT004 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds support for 64 bit addressing and BDs. -> Enable 64 bit addressing in DMACFG register. -> Set DMA mask when design config register shows support for 64 bit addr. -> Add new BD words for higher address when 64 bit DMA support is present. -> Add and update TBQPH and RBQPH for MSB of BD pointers. -> Change extraction and updation of buffer addresses to use 64 bit address. -> In gem_rx extract address in one place insted of two and use a separate flag for RXUSED. Signed-off-by: Harini Katakam --- drivers/net/ethernet/cadence/macb.c | 62 ++++++++++++++++++++++++++++++------- drivers/net/ethernet/cadence/macb.h | 10 ++++++ 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 89c0cfa..6b797e3 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -541,6 +541,14 @@ static void macb_tx_unmap(struct macb *bp, struct macb_tx_skb *tx_skb) } } +static inline void macb_set_addr(struct macb_dma_desc *desc, dma_addr_t addr) +{ + desc->addr = (u32)addr; +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + desc->addrh = (u32)(addr >> 32); +#endif +} + static void macb_tx_error_task(struct work_struct *work) { struct macb_queue *queue = container_of(work, struct macb_queue, @@ -621,14 +629,17 @@ static void macb_tx_error_task(struct work_struct *work) /* Set end of TX queue */ desc = macb_tx_desc(queue, 0); - desc->addr = 0; + macb_set_addr(desc, 0); desc->ctrl = MACB_BIT(TX_USED); /* Make descriptor updates visible to hardware */ wmb(); /* Reinitialize the TX desc queue */ - queue_writel(queue, TBQP, queue->tx_ring_dma); + queue_writel(queue, TBQP, (u32)(queue->tx_ring_dma)); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + queue_writel(queue, TBQPH, (u32)(queue->tx_ring_dma >> 32)); +#endif /* Make TX ring reflect state of hardware */ queue->tx_head = 0; queue->tx_tail = 0; @@ -750,7 +761,7 @@ static void gem_rx_refill(struct macb *bp) if (entry == RX_RING_SIZE - 1) paddr |= MACB_BIT(RX_WRAP); - bp->rx_ring[entry].addr = paddr; + macb_set_addr(&(bp->rx_ring[entry]), paddr); bp->rx_ring[entry].ctrl = 0; /* properly align Ethernet header */ @@ -798,7 +809,9 @@ static int gem_rx(struct macb *bp, int budget) int count = 0; while (count < budget) { - u32 addr, ctrl; + u32 ctrl; + dma_addr_t addr; + bool rxused; entry = macb_rx_ring_wrap(bp->rx_tail); desc = &bp->rx_ring[entry]; @@ -806,10 +819,14 @@ static int gem_rx(struct macb *bp, int budget) /* Make hw descriptor updates visible to CPU */ rmb(); - addr = desc->addr; + rxused = (desc->addr & MACB_BIT(RX_USED)) ? true : false; + addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr)); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + addr |= ((u64)(desc->addrh) << 32); +#endif ctrl = desc->ctrl; - if (!(addr & MACB_BIT(RX_USED))) + if (!rxused) break; bp->rx_tail++; @@ -835,7 +852,6 @@ static int gem_rx(struct macb *bp, int budget) netdev_vdbg(bp->dev, "gem_rx %u (len %u)\n", entry, len); skb_put(skb, len); - addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, addr)); dma_unmap_single(&bp->pdev->dev, addr, bp->rx_buffer_size, DMA_FROM_DEVICE); @@ -1299,7 +1315,7 @@ static unsigned int macb_tx_map(struct macb *bp, ctrl |= MACB_BIT(TX_WRAP); /* Set TX buffer descriptor */ - desc->addr = tx_skb->mapping; + macb_set_addr(desc, tx_skb->mapping); /* desc->addr must be visible to hardware before clearing * 'TX_USED' bit in desc->ctrl. */ @@ -1422,6 +1438,9 @@ static void gem_free_rx_buffers(struct macb *bp) desc = &bp->rx_ring[i]; addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr)); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + addr |= ((u64)(desc->addrh) << 32); +#endif dma_unmap_single(&bp->pdev->dev, addr, bp->rx_buffer_size, DMA_FROM_DEVICE); dev_kfree_skb_any(skb); @@ -1547,7 +1566,7 @@ static void gem_init_rings(struct macb *bp) for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) { for (i = 0; i < TX_RING_SIZE; i++) { - queue->tx_ring[i].addr = 0; + macb_set_addr(&(queue->tx_ring[i]), 0); queue->tx_ring[i].ctrl = MACB_BIT(TX_USED); } queue->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP); @@ -1694,6 +1713,10 @@ static void macb_configure_dma(struct macb *bp) dmacfg |= GEM_BIT(TXCOEN); else dmacfg &= ~GEM_BIT(TXCOEN); + +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + dmacfg |= GEM_BIT(ADDR64); +#endif netdev_dbg(bp->dev, "Cadence configure DMA with 0x%08x\n", dmacfg); gem_writel(bp, DMACFG, dmacfg); @@ -1739,9 +1762,15 @@ static void macb_init_hw(struct macb *bp) macb_configure_dma(bp); /* Initialize TX and RX buffers */ - macb_writel(bp, RBQP, bp->rx_ring_dma); + macb_writel(bp, RBQP, (u32)(bp->rx_ring_dma)); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + macb_writel(bp, RBQPH, (u32)(bp->rx_ring_dma >> 32)); +#endif for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) { - queue_writel(queue, TBQP, queue->tx_ring_dma); + queue_writel(queue, TBQP, (u32)(queue->tx_ring_dma)); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + queue_writel(queue, TBQPH, (u32)(queue->tx_ring_dma >> 32)); +#endif /* Enable interrupts */ queue_writel(queue, IER, @@ -2379,6 +2408,9 @@ static int macb_init(struct platform_device *pdev) queue->IDR = GEM_IDR(hw_q - 1); queue->IMR = GEM_IMR(hw_q - 1); queue->TBQP = GEM_TBQP(hw_q - 1); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + queue->TBQPH = GEM_TBQPH(hw_q -1); +#endif } else { /* queue0 uses legacy registers */ queue->ISR = MACB_ISR; @@ -2386,6 +2418,9 @@ static int macb_init(struct platform_device *pdev) queue->IDR = MACB_IDR; queue->IMR = MACB_IMR; queue->TBQP = MACB_TBQP; +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + queue->TBQPH = MACB_TBQPH; +#endif } /* get irq: here we use the linux queue index, not the hardware @@ -2935,6 +2970,11 @@ static int macb_probe(struct platform_device *pdev) bp->wol |= MACB_WOL_HAS_MAGIC_PACKET; device_init_wakeup(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET); +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + if (GEM_BFEXT(DBWDEF, gem_readl(bp, DCFG1)) > GEM_DBW32) + dma_set_mask(&pdev->dev, DMA_BIT_MASK(44)); +#endif + spin_lock_init(&bp->lock); /* setup capabilities */ diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h index b6fcf10..aa3aeec 100644 --- a/drivers/net/ethernet/cadence/macb.h +++ b/drivers/net/ethernet/cadence/macb.h @@ -66,6 +66,8 @@ #define MACB_USRIO 0x00c0 #define MACB_WOL 0x00c4 #define MACB_MID 0x00fc +#define MACB_TBQPH 0x04C8 +#define MACB_RBQPH 0x04D4 /* GEM register offsets. */ #define GEM_NCFGR 0x0004 /* Network Config */ @@ -139,6 +141,7 @@ #define GEM_ISR(hw_q) (0x0400 + ((hw_q) << 2)) #define GEM_TBQP(hw_q) (0x0440 + ((hw_q) << 2)) +#define GEM_TBQPH(hw_q) (0x04C8) #define GEM_RBQP(hw_q) (0x0480 + ((hw_q) << 2)) #define GEM_IER(hw_q) (0x0600 + ((hw_q) << 2)) #define GEM_IDR(hw_q) (0x0620 + ((hw_q) << 2)) @@ -249,6 +252,8 @@ #define GEM_RXBS_SIZE 8 #define GEM_DDRP_OFFSET 24 /* disc_when_no_ahb */ #define GEM_DDRP_SIZE 1 +#define GEM_ADDR64_OFFSET 30 /* Address bus width - 64b or 32b */ +#define GEM_ADDR64_SIZE 1 /* Bitfields in NSR */ @@ -474,6 +479,10 @@ struct macb_dma_desc { u32 addr; u32 ctrl; +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT + u32 addrh; + u32 resvd; +#endif }; /* DMA descriptor bitfields */ @@ -777,6 +786,7 @@ struct macb_queue { unsigned int IDR; unsigned int IMR; unsigned int TBQP; + unsigned int TBQPH; unsigned int tx_head, tx_tail; struct macb_dma_desc *tx_ring; -- 2.7.4