From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751937AbcHAHiw (ORCPT ); Mon, 1 Aug 2016 03:38:52 -0400 Received: from mail-cys01nam02on0060.outbound.protection.outlook.com ([104.47.37.60]:30528 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751875AbcHAHiS (ORCPT ); Mon, 1 Aug 2016 03:38:18 -0400 X-Greylist: delayed 966 seconds by postgrey-1.27 at vger.kernel.org; Mon, 01 Aug 2016 03:37:43 EDT 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: [RFC PATCH 2/2] net: macb: Add 64 bit addressing support for GEM Date: Mon, 1 Aug 2016 12:50:23 +0530 Message-ID: <1470036023-22368-2-git-send-email-harinik@xilinx.com> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1470036023-22368-1-git-send-email-harinik@xilinx.com> References: <1470036023-22368-1-git-send-email-harinik@xilinx.com> X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22486.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)(63266004)(50226002)(8936002)(19580395003)(19580405001)(106466001)(86362001)(575784001)(356003)(2950100001)(2201001)(4326007)(81156014)(81166006)(8676002)(50986999)(76176999)(11100500001)(107886002)(5001770100001)(9786002)(48376002)(50466002)(5003940100001)(36756003)(189998001)(2906002)(92566002)(77096005)(47776003)(7696003)(305945005)(33646002)(87936001)(586003)(36386004)(4001430100002)(7846002)(229853001)(107986001)(217873001)(5001870100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BL2NAM02HT070;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;BL2NAM02FT056;1:nuoSgmtJaUFmWEvqIXHjzPGqb0wqGjzJ+MeaoBuM13eOo376LdaaC0IixqObWfvRdan/hIcAb4mvToA9oRl6OKnf1hC+a9+Tjk44Gk3enHgcI2TrFaTGNT+9Vq2Ggpjx9B5tPzHx2S1prDp3bGLPbzkfpi91xNy1e9PjqSKopPpwW85nn83R36yT8j4sNi4rNUytKlxL0LSTYIB2enjREUZQmkWfLk5RYs8VWNp6BIAuUzgejLoLw/1VlzMWFQ3+R4jGy2AkdU6dH2zNcHk+Rtn+XkxmpWYrLu/zVUlVt0Q3WXrX8dU65eXGS27xX4426o4Tv89sbnqlczg62E/GyJ4zGrIoo1CWGYIP1lL9oQjdrlJNIXMwqGThzIg4aV21YGqu4Amavam25Rs6hBto9dkFt0rcxIWbxl3QmcGKrpFcsS3XO+XT6AD0M+dQsK5tMtj2t9N5mpkky4pNAas6iPgMp35S889LxZmPiiWGRRbeX6EfN8uJsCmMweVbp0n5zJtkiCPhE13f4x/LZn6+SXv6bWZTo0g1p2eRk5VmZt/y1JHdcclr4Paoq6KKHwLMS/GTZCJhLrdzEbiuQkfuj5Gp3hnjXp4C1fDSVAj5i9g= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: e0148f70-ea30-4287-f355-08d3b9dc5564 X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT070;2:E/Rr5fAvB9xC01PXC3+4UJtuMNyGjEIoWWIgP3FK+RJ9VAVXKOI/GZNOvyy2x6sq6HPrpgDBnFypGGr+hPog9ACs9AXgz6oDVGdR+dACKZZvjF55ndcevemmPjhY2QWAbTunFmOiBUYEBIJ2nOTSSluhJ9KMsABZkhlq8BzEwiK5vhYEa6Ppfqb+BYqD4o59;3:GYmCHzI7WDpoq7Z7I6/kv0JwgyeDpG+pBtwHXiFgOmj+ieZTfRbYUDmG5tCXItPE0DxY50Ea9P+QIJqbQYekVI+oU/Lzqx/AZLzM0XHFz9ctSC/NiJWXQcuCWsWyDHrm4EiFcJsI810O79DtgOM4Xl9iIgvHXgE+dj1E7akmc1ZqiE/Plyyup9s+TZ4WiHK5EfqvW1iSdsW3No46b1K68Ca11L/6pTpskZhLz/EQ+VIiXKSR6/XSVlT3ysLSztKzpc8oMrfD8k/Kdq79rPQ5ug== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BL2NAM02HT070; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT070;25:oPDqd+CJMo13qnl5Hp/IeoRT8bAP0HQ/ZjVwn0tKryS3u821g1d2U/p573DKpQmbef9MobPCxIBiYD3DSdyUA5xBmneL/GFw7P6rvWeh0ANEqQPXNqCx37j36sz/mxTbzlt26NRAentnpcXd+Zib/NnsgSB99teqvpVwo0LJQoiBzWqlaWFUQj8TqKXSRI/5gaYcotVIJsD3E16EC6QV0X5a33FBoDNLWEnJGOzePDnLm0vh3NvI4z4+imi6ccCZ8g0mzdaa+Rn5qOCAxP0ZWjx4gqGF3yzykye7ixVVV2sHxTYswHc41nynbPDMmIVpTDD/3I28hgqtqRBpZNE1LJsSj1ti09jrg2pGzGNAT44ker+RtvlpXeu9nHqkupuKW3rCUP0GdENTvJXQcmLIm3YFHynXgoKcXLMbDxdQGARoh39Ebikojt4hGeXuauVAR+KyhqTywOEdcpPvjQlQ8Cgvo7BRkgoOiio6aHeOXtSRGvRnjWyEZ2XE4SJdF+ncKxReDcW28Rbxdw/n5yW4ExRlFIoTXd4NzntrIsdXfjIn+TXbgjUnS4w9vh6lSwexj+urz+oGzVZGCUMw6mewHo5i6cP13msptALzPNyni1IWegp8k6I7Bk1hoQRXx7t6pFrJ8mFVyHB1KbZyCyW+WeRvwPAxUt4JzAwYkX1AtB2o0ajc0L8H/vJ3SWvg2M+AfUpKuwIL0iaZ4ipHAYLlZXWnLLmg4NFL6AThqICHay59xhga65k6Axv48w8O7I27+IqSrijnilhMYIcxQ1PNug== X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT070;31:Leg022+Kt5osUvcXTC4DlOm++IaGeKCIYqqfin/2wSEljDsOEsuYQ/2YotWCOEV8KcJiqh5RZnMzK/MEwFJAA11vqof/hsSwq3+oKHjQqUjgTWan/GTMvHZSw/nieYd9ObsPFqC9MS+M/Ax95/kGJiZLJLyDoIC4K9Gou5B3bctxPF2wkgNoNAFu+OoHwNKE9TNFr9RVtyCJCLURfUOU88kUTqnyXV9vrcgJWp6YKNU=;20:1BtTAS1wLv838dp4BwMp0NtDNL/abN6uofLdBWENPGQSbn1FWNYif8P0Y+fyYxjTTXwmzGO/rUvu0QPQL54lvs5kBdEjMfk8Vu+Z6guxv7ZdDkxBYPt7M2XCGnJxm6PgRyPbzs54Sf0hgpm2nFWisNpPq+auQziTRu7bvh9TVGIrCEHalOSDgQh8Cw6XifcghR7r91XKT+O+RiRrAoWGoLbciZPyUdbvucy0svE/fx/iUS7qZOUyNsczIorEIfNZTApvPuC1cBwUMRE/mm5lg2xsCa1VRvXQNjFMv3XDc1OfUYuitEkPIilpVlEzOGf4+fFV1PRulhIs1tiHj2Mxbta9sl3khH4nIWD5wee1HY1U22ZKa+RcelBunUBIq6CPeMd+f7CcbzkkdmA3mTSCDmGz82DaKAEylCNJvCAddPHnDF9IMd4kTWeEmJUeTBPpog5OXnNdqROzfx9Q2XrEH1V47rEdNY+Jy+nnyoywArohL6NppghccV7e2BoUuBqb X-Microsoft-Antispam-PRVS: <53eb137f78ce470181d1772a7944d92b@BL2NAM02HT070.eop-nam02.prod.protection.outlook.com> X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040149)(601004)(2401047)(8121501046)(13024025)(13023025)(13015025)(13017025)(13018025)(5005006)(3002001)(10201501046)(6055026);SRVR:BL2NAM02HT070;BCL:0;PCL:0;RULEID:;SRVR:BL2NAM02HT070; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT070;4:xG2HjmW6VuvloB+mevS9GHhVFMH9Cy9PREd6vhqP5gwxHMFP1k61dQl+0ivtHJYArmTdEmY/6+eaeRRSGHaoY0PVzO+8448J7FIbpAclXDRymX9pygGZO0RYe6uCXxV8UUwjBVfDFQEgfcXFocdw2Lhg8s0JF/em/HCowUlJLBousg7GbOKzt+e5GsSTYwD8TpAiLgN5ZAFJUAsIbT4gy5lJ+hfNEt937VQJZZaKCd7C9Ghe5POxUvmdhgMejMdcW3VjSMfZWTPosrMrkDpVFgP1zX7L3ne32xtUkx1bf1rTQrrsn3Y8wDiWtqE6RdJ3z19AqnR6toFPz4guBTE0nkXvQMgsfTO2ajoxZPnVqW53ckzWNDCuAm+4+yzHksBjrscBhLfd3BodGCNg+GU1NmelEQTCjtEDbxMzWKzX6oWPvJpzoURkkCf1+XK/3Y7AWb1fvKxUF0FfIBttIdc3nK4j1Cj7zF2MF0t6DKkADmOvhz73uRsLG1gHmzDV7l8TS2K07Ib6mvgnbt2L3AWEu6T0kOB+ln36MoD2QEh/Nyk= X-Forefront-PRVS: 0021920B5A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2NAM02HT070;23:DkTPgIkwr1qxdmBWyR3Mq/Otne+gOiiMZ4tWjD2bq?= =?us-ascii?Q?tfIGjTKZ5C4OeUBlGVStgE+laDI8k5j5Etufr7EZAX47fK7n8CQGAzL+RWqx?= =?us-ascii?Q?44eIaWY8oNO6XqH4XkuFHBTwbCQtHRkeZkrinMPDcI4vxL27ic16zfQIusxC?= =?us-ascii?Q?V9qTSkUTLPJVbUuTUr7Kw5MVGjGTDLR4niHBytAoEzZ1UQtUqcMIs/efmlKo?= =?us-ascii?Q?c9Y8r/kcxTFqwhQmJvc0QeTFoQJ+/0vaI0nkuw2XVL5LQfEAYQsT/vqTyru+?= =?us-ascii?Q?N0WPpmz0zh+Ha/Rthw7ai08zgNoCTpNyjXG9b7PJehaY21eYBB9Qi1AN6TvS?= =?us-ascii?Q?LHSM7C/8fH5WMNvxbhRPC8mTMcSJjnWtO84HU/wzlQhIsAg9Iau/A4Q6VyS0?= =?us-ascii?Q?/WaMOOYVVN9paPY/r30QyeO6zyuCJNhkQdjvWPUWWEKebyOlNVEYHhpM8apy?= =?us-ascii?Q?96XIpW1+WxOWd2eFBDxQ73RIKS+NkbHb1XkHslobSkrwQU1amtDFKIcvlJjL?= =?us-ascii?Q?GCMbBpwEHf9Ff6IKlg+XDG8M7bH+qEwc5Tt++EuW+XYhzDfwG0XQKHKmbS7k?= =?us-ascii?Q?Ztq3HBOLnLWVbJwJJd05vb0+NSamg69Sut+Cuj0xn1Wttltn5Yv0tTMmFUPv?= =?us-ascii?Q?wCRTmc5bXS6hKvNfKfiMfRQsXsjGsj6bcTtOJUJsDtR+c9DKxvS1/My9xtYb?= =?us-ascii?Q?k2ALCvDeM/u+CSSeDm8J0NMJxLJLd2m100yFZGlO/BujYvkI6fYGkKFllA4A?= =?us-ascii?Q?kZqwiXNip1bLaj/OrV2uy7MXhmnSBOgKjKWlUpeigYzjcr5/ad8X3fTeliQ0?= =?us-ascii?Q?dYC7szN8USF0mR4WDn7ZTMVQTIM2nFm+lNUuOBUMZQnjmgC7oAD8BaRB3mr0?= =?us-ascii?Q?tGvh/El3cz+59IlSn34PptURHPK62WpzsbrN0EpF2x130pbFohhZ4jCT2zOP?= =?us-ascii?Q?Mu1I6FjjhQdzywYnHQF1NBgmVZ+IGUz2XXh+jDph9GPWytT3oeAX1Vrr0alz?= =?us-ascii?Q?CKBnVZy6gQp3K0KGshRVHGehyUSH23rwyEbvx00vzFL/wooQRZI5gPBhQIAV?= =?us-ascii?Q?UiWqwqdR3EljiWcuWd4vhr9bWQiqwz5gapre+XIBPggX/oXubgpJNSymTiLf?= =?us-ascii?Q?NtSDMYj5Dipy70xnkUE29bR7yRY4zxkQlpXRY19KPjjR1rYk+tih5GqIFpAN?= =?us-ascii?Q?a6PWnwAyUMXkqzY3BlP/K8F0UzxW6x82Z/W9vb7vhpnO1piRybTNFQrPg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02HT070;6:JPyTwAcdIqmSouCggCp6Kvi2KpQZ/zXZahXRj0jy4j28ixMD3DxbO/0traTykI9eGbDAjmVkTbrJpVumhBBoevHuqmjqIrRaC+QKXFHbIyvXRFxNnJIo5JAGNpjLOrVTCAmyb/EscMrl7ltx0EbvWWfO7HZLUTlTmRcT0F8uOdoaDLtum7pO//Wjyt+s+aCyFTgWBqYKiAEeZNIanNV0O2x2qdqbcBRBCWrvJt0/JqH3yDl82Y7mTDtz8Lx2Pg19x5j2/UQmqlf3PfEg1Yu2q0M8W3mun3wHmFT6yAzTNxmDQaDMaysxD6OMto4UYSvKcgbrprqEpq6/tv/0Wmk2XA==;5:OPSbqVJ5gO8kMCjOL5XT6/+eaFcCOKSGBnTqbC59w8bSe0S1p9uBOlUJaQrFP2u7g2GkVQui1+7Ji0lQr91TLRQN8Seo05X3F9lTuES3dKC+BGbfHEv4FXeSR2zEYtA8ASK9mb882uAh5/lkpAAOIg==;24:n/gS1AncPstDPzo+suaFC13doaU2sd1UcBPXNiN+ylGo99lZU+C1Mh8IcQ9SJt6nXaoO5SBjtK+N2GiFXoi3prHuuKUp83aIBfwdsezHzZk=;7:/X9q0yC0weTq3ZzRYUq42Yoq3qKp5UqlBiEjTDq3qcLmytOqLO7AeAH0+sD0AG4IeUrD1XkUlpLM2LJ0612sOnpB8fTEDgS0IBqBNmWVyQ2FWQTJNlar9JTj00aufb//Ir2zN0pYa9NvGsWvgRT/S7c/qVQL0FOjrM/L8YkbWRQUlireDbgu1qRNi6Axy9K5pxt8D2iHnF7dYNZ4RkWCiN24k8JhOjh5PgRIrWm+p2WOpqtJ/0VgWvGHomZ8hHUA SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2016 07:20:36.3182 (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: BL2NAM02HT070 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