From patchwork Fri Aug 18 00:03:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 802982 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="n0vDyY2t"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xYNb30mVbz9t3m for ; Fri, 18 Aug 2017 10:03:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932071AbdHRADZ (ORCPT ); Thu, 17 Aug 2017 20:03:25 -0400 Received: from mail-by2nam01on0079.outbound.protection.outlook.com ([104.47.34.79]:2464 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753887AbdHRADX (ORCPT ); Thu, 17 Aug 2017 20:03:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=eIZ2BopavFcrxAH+NqCxsC/h79/QXx7ITYqbpHmFA38=; b=n0vDyY2tsKgGKY6Y7Wl9zJgbBbg4ABr5J0GTzTSjw6VuIGrRgI2+yOjTpMJyqNThuaAWZUDt51JzYvcFZhPFkr7P4X1b7mPBHQi2G+yMIP5VdUhvq8CO4nTbaCzkWecrEMZLCaCrVCDr42k0eGoDueXZtp6a6NmVcRX94Sqbrbs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by MWHPR12MB1151.namprd12.prod.outlook.com (10.169.204.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Fri, 18 Aug 2017 00:03:20 +0000 From: Tom Lendacky Subject: [PATCH net-next v1 08/14] amd-xgbe: Optimize DMA channel interrupt enablement To: netdev@vger.kernel.org Cc: David Miller Date: Thu, 17 Aug 2017 19:03:17 -0500 Message-ID: <20170818000317.10005.92976.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170818000201.10005.36182.stgit@tlendack-t1.amdoffice.net> References: <20170818000201.10005.36182.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CY4PR15CA0005.namprd15.prod.outlook.com (10.172.74.15) To MWHPR12MB1151.namprd12.prod.outlook.com (10.169.204.15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83e393ee-05bf-4059-5ca7-08d4e5cc89aa X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(48565401081)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:MWHPR12MB1151; X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1151; 3:a3HXk2CH4mEC1QvddNfzYUNIResWjGbihq+EewCEscm4h0hGGofSrDzJIe8D4m+RByZnUzSNy46VWHB+DVDjEHuFFmoEM6fW802rFaCo7YmHW4HObWMBAU4WxYoKFsM3Hi/cGrHMpNkHGGCnI7juLnBlkRb170HpeWcxBro6/K2WbnjWtAxGhbUht5NH6QkuyHB9afc3/iplWFmr79HFST687BdSxObCu0yxXH5cpomtZ1eBik+bFkbuCMB8jZzL; 25:eJju6HsXEhGQ2s8gLJU4t/6put3ClF6I/esMkkhK/HUTPflL1WxgvWvnFK+BYHKkaMQ0okqVai+vxTIWPatRKs63zQkWGSqsf5I0kpAcO6fv6Hc2+PWNIN8slmTNp2GQUO8/Bj//l/tKEx/iwUwOhTZCbq4FJa4p9rxSYU/Tev1TPBjB6nRUejEt7rXkSgsyKVpK1RxkqmQHTc839lCfwlosMyzniKfX2D032JZwOUHk7JTAWHHYHK2hHYPcyko115PEkwBzjuYx0y6s+s5InoiESFzZV+ZSo2x8aDiJYsvwQRkRk9HoSon6aBec70fgjqVar29UZEmP2z811KwF9A==; 31:mHqFtsJ9+fcMLd9L8YGLC7bEggMZVA+dRS01Pw9GaJypBGRVtM7yJEyFIxBrt/rY97Slui9zQtt1/OZNkohRpTHglo/OvZBd0A7otYBAweh3Nq8G5PafGl4jEqK26IlMj+vmjrtcxyIaOdM1+GQMcz9vnm3Hp5bv9ymLl07RjwYx1hjUs2uHdckm3rz5ZfFfRkCXLg55Jsx0DlD4mtZ6B85UES8OCW9KxlIGyja0tnY= X-MS-TrafficTypeDiagnostic: MWHPR12MB1151: X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1151; 20:uLDRF+WysRzQhE8X92+6shclpPNXMLMmXU4TzD5R0tSws/8xvSfmiA1bmXxh9KU0jdaenJCMAMnCSR/R+irIiKFxYpDxbDfsPKVE+SeR7KA78O9VT05UpFpsWWi3rIY+1Q/pZjsDJevkyq84j7MDcmOg9B/RxkfC1npeu6RFSNjQdrAb93c3I7SEMSdOZxe1njzydmNSCZNOEn9nfjBY9WX9vC847S4MKKzbZJPk80u8QMcq0FHzoGR+5xq12N4lzi137RQ//5cQWV1Joc2wzeXSMvGyNuB00/8C8OiUPyc7JRSFfh0glXLR8TjOMxz2l5/3s4Vx4Q5FD9d/tpcFYGQ/gqN4lsc7kRHERR0bzPcEu0jrmSXKkK1E8iEfFvadVVhnMFstnFjuoFFYfuMbo4U58LzcCKePqHT0xN+1vxdnS9lURomKW2LhFf4G6L3fzbF0gVfS+TtHjSCQAwHmhDJOQvTCzXae9mPaQzekAXVuGRycgjiYFLqHLhaW+V0t; 4:7jni8diyh9BZPXtLUZPXVnjVrPu7LQ4hffQjq2Uq7i/z12mZWN3eqWTUAj+OOrhcvPTLvsFkm3Pex1tlG0Z9FhnEgbmqE7NSm0iTu/pAmVmrqcFU5oL/PYWLJq3TF4E3W76wFZXsRrwlxrRkfCETretO5+KRdGOZ1njrMnF8bU0inutjgAkZkmpoDQNOpuqoz70+Gji3flAjMqqEId3EdG+ZBUy8lEj+MZidBb8RwKHxJyPabh9YRWYCK4MuW/7Gm1O4Zv8GaAF0JM0HHHfaOK1wvZM/VwpL5HS4goA9j18= X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123558100)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR12MB1151; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR12MB1151; X-Forefront-PRVS: 040359335D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(199003)(189002)(4326008)(83506001)(25786009)(305945005)(1076002)(189998001)(50986999)(76176999)(54356999)(7736002)(8676002)(81166006)(2906002)(478600001)(97746001)(5660300001)(68736007)(230700001)(103116003)(81156014)(2950100002)(33646002)(2351001)(2361001)(110136004)(6916009)(4001350100001)(47776003)(53416004)(42186005)(6506006)(55016002)(50466002)(23676002)(69596002)(86362001)(97736004)(6666003)(53936002)(72206003)(7350300001)(3846002)(6116002)(106356001)(101416001)(105586002)(66066001)(9686003); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR12MB1151; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtNV0hQUjEyTUIxMTUxOzIzOkpGOGFZbFZNQlZGRFRidGRoZC9Oa2RNS2FY?= =?utf-8?B?RG9VaHVMNHVOclI3b0ZkZ0RxOGFKaXVSenN5WTVubjZ5dUViRXlnQkVIdzBG?= =?utf-8?B?K3RRbzBxRitPYjVGamoyNEJSdHVMcHFRcENIZktURlpZRExYdTUvbE9FL3Nz?= =?utf-8?B?U08vVWZwd1hYWWZkWFlBZ3hMUm1QZG0zTzQzWnRUU2hCYzlkcXhFdUIreEt5?= =?utf-8?B?NmVJcDFybG45RkttSWdkbHo5cmpDK05KTCtuZUd6YWJla293WWtyd1RjM1Bp?= =?utf-8?B?UkFQK1ZaNVNHakRReWhYTW9qRW1hb1VLa3gvK2VqQUNuWUozTStVZlgzSUpP?= =?utf-8?B?Mi9hYzZ5STcvc241SzFDSTlpVVFDSkZwRk1IcFNXZWxvOWxqTGFONzEyWHRD?= =?utf-8?B?RTFLRGFpTHhHVFlEZlVMSTl6RVVnRi9nWjRRb0h5OHpQWm0wY3piWXVKVW56?= =?utf-8?B?SmVCUW5lSWp4ai9Oc002MHNLM29QSzN3M2dBOGMrMjdqbzdTSkVFb2orOUlL?= =?utf-8?B?NmlsODZIQS84NFlpNkk3UDFURENTOG8wTnBjSXhQM0tqRXhvV1M0M0Y4dEdx?= =?utf-8?B?L28zcGwxZjE0MW9sUWdSRmpBMWdMZ2RtbHBZcXBUcUVjcUtnUk93T3hUVy93?= =?utf-8?B?c3d2KzM4NWY3YUJXdit6MXB5WDl2TUlYaTViTVQ5U1lFNUFxY1VubXhaWFFu?= =?utf-8?B?OVRQRTkvZHl6emEzdUE2c0RwWVYrMWdHdU9hYmlZUTR1RndUaDdmM1d2TDRv?= =?utf-8?B?M3lPcUJkVG1aVWlKaEZYcnZncUI0QWZIOVZ4NG9WcjRIVDZLTkNjUHh3ZlFo?= =?utf-8?B?SHEyemcrWUx5eXdkdUpUbHJwdFA5U296dXM5R2xrWTBiMXBnblFhRHVqQ1lR?= =?utf-8?B?NzNCa0pnTHFadHJIL042Sy9PU2RJODZOR25RZUJrWTZZS2lpbGg3NDd6TlhP?= =?utf-8?B?UzNkRC8ySmY3SE5xbVllMHIxTEV5VStTN2owb1VoZGRKWGNpbmJQOFFYV2wr?= =?utf-8?B?U0JsYnNNVDR2Rm42d1E1UHkyT2hxR1M2OHFsWU5ZT0k1VG9EUEo0bXRaSjlG?= =?utf-8?B?akhOYUdqelBCNVdlR0Irc2J2MVNVNWE1RUo3RnNmRytxNzNsTHJoamtSOHlK?= =?utf-8?B?OFU5RDV1b1hsR0U5b1d3SjVKZ2JwQ1J0RHdTSnNSbnR4WFplRTBFbjlkenNQ?= =?utf-8?B?ajhOQllqZURoTzFWUzB4R25pRjZTNExSbTMveHFOOVB2bHhwVERjV2lhaUhX?= =?utf-8?B?THpqZXo3b3NnSUM2QkZuN0xnUGdIOVRjODE4SUJsY1lyS1UzUXpwOEEzNTlV?= =?utf-8?B?ajBYVUc1TWh0ZE9JbHZpUFpJcXQ4SGFRNzRMU0dkWkErYVVDOGoyTWE0Uzdx?= =?utf-8?B?OW40bGI2R3BoTDEzV0tyVzJhbURSdjNVU0YzR090bXI5ZHJlMGtiRHVMNDU3?= =?utf-8?B?TTJBTFFKcWpwMXVhNnQxK0dwU09USmRmcDRUOE5nZGRIRlNxZVBDUC9PNFQ2?= =?utf-8?B?UERaNFMrd3VzcEZsbDFkKzZMaGJ2ZXlCUG84aTduUE1acDZxVURQaFhUd3FQ?= =?utf-8?B?S00wYmkyZnNrU1BkREpnOXlEbVYwN1JVRnBJc1QwUkJqRWFmdEhUMFBLTUND?= =?utf-8?B?WEhNRzJwK1JMSDVKd3lGemhpckdtT1AwUTNTK0FNRWhpeFV1dWt2VGlnYzdI?= =?utf-8?B?dUVqaE5EZjV4K1NGSGpncm5veVI1a3hrT0llNFVLZ3hndmtsTTVKTzY5bG5t?= =?utf-8?B?d2pIYUpGclc4M2p3RVBndz09?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1151; 6:3iJWj+6O5PjC7Zl3aN02wEDaQVGpebv7K7bStfMW6bY8AUvKEty5Wv13qs2D2UAq42nvakEWk8H423lCSm/rBnHnxp9mz3ncDSWWixBMmnhWr9ZCKP9c9YWDKWjXiU7uAwp9WllDnnxY9phLfqGcwAiZmN3//H8ZKl9RQ0e62bKvgSzH4z70Ro/r8VIN+yoPzHvPrgPB22MQ4v8tI18MTXzNZAWJjtpqPWYvHSBTR67q8Tfx8VKt0HSgx0br8Qa+Jpcqxj2lPkjZi/wqnQ2do84xJ0EDn5v7u/H4pK1uR7jYQazzD7YKehmwPiLAt6ZPcE1lWofEvnTCo7MuBHW9XA==; 5:UILdRS3NaP+0MWP7gMhfip9XM6uO5ZvgL+ZdOHh7wpX8jHGqmn709G1AwPRsCGYAm6io+Eh4Rd7J7zpPTATUSoaGHKtEuICRW2OeqyRi1XAAqHlcY6y1ODtaPliHCr4AALGPY+MysokgfmcDak2dSg==; 24:NxyglQdGCoLtlIkVymO+NvTk3I+Cmriyk3GMKFMt6CPmaP0wbHBPRz2+TOT26ROtsvxlg2OKkDQ0YXacM7hqPPCQB+p41Jn56huTY/1gqCo=; 7:z69psnB8NP975nD/mr8+dpKKkYYm2n0MtuG+2hN5lZeZDb+rvIeHb0VdQLJkl31rg06igmH+R8oqc6kqu4ZiUprpLlowGrgUfwcGilGn1srC5cEKv5MEGwHUA5q1ITAe9F2AFsiAPGGxJ5Q7lTS9AEroFq/g16obSLp5qbk9x9Gvgfl2pxTRM9yvwzkcnsqtvo+i+AkBPHM2h93CWDvOGw2ElXPGvyTHKZ88f0igdQ8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1151; 20:N1dpb+iIPKLH1MGsbSnaTyvfquk8UguSpouXuxsQN9qv0jSWBE7kNjKPOjfLuMtVB2S0pbAAg584jqDxxN+8LyVLzZIybOC3N/kUd6wtwete93wgnON1WwUFD55QqwM6iYEm3/3nZq4sHcJ+xIoaZmcKUCV+2hRog1MALrM/4wm3GOX2f6oL9ys5exuK/stsTi4FepL+AZ4+Zu673p9NGFzF0+nGal6kstMLaBL7/ugIEDe0KldOLZX+Ta4A+HOe X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2017 00:03:20.8533 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1151 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently whenever the driver needs to enable or disable interrupts for a DMA channel it reads the interrupt enable register (IER), updates the value and then writes the new value back to the IER. Since the hardware does not change the IER, software can track this value and elimiate the need to read it each time. Add the IER value to the channel related data structure and use that as the base for enabling and disabling interrupts, thus removing the need for the MMIO read. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 77 ++++++++++++++---------------- drivers/net/ethernet/amd/xgbe/xgbe.h | 4 +- 2 files changed, 37 insertions(+), 44 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index bb60507..75a479c 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c @@ -605,7 +605,6 @@ static void xgbe_config_flow_control(struct xgbe_prv_data *pdata) static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata) { struct xgbe_channel *channel; - unsigned int dma_ch_isr, dma_ch_ier; unsigned int i; /* Set the interrupt mode if supported */ @@ -617,20 +616,20 @@ static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata) channel = pdata->channel[i]; /* Clear all the interrupts which are set */ - dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR); - XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr); + XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, + XGMAC_DMA_IOREAD(channel, DMA_CH_SR)); /* Clear all interrupt enable bits */ - dma_ch_ier = 0; + channel->curr_ier = 0; /* Enable following interrupts * NIE - Normal Interrupt Summary Enable * AIE - Abnormal Interrupt Summary Enable * FBEE - Fatal Bus Error Enable */ - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, NIE, 1); - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, AIE, 1); - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, NIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, AIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, FBEE, 1); if (channel->tx_ring) { /* Enable the following Tx interrupts @@ -639,7 +638,8 @@ static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata) * mode) */ if (!pdata->per_channel_irq || pdata->channel_irq_mode) - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1); + XGMAC_SET_BITS(channel->curr_ier, + DMA_CH_IER, TIE, 1); } if (channel->rx_ring) { /* Enable following Rx interrupts @@ -648,12 +648,13 @@ static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata) * per channel interrupts in edge triggered * mode) */ - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RBUE, 1); if (!pdata->per_channel_irq || pdata->channel_irq_mode) - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1); + XGMAC_SET_BITS(channel->curr_ier, + DMA_CH_IER, RIE, 1); } - XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier); + XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, channel->curr_ier); } } @@ -1964,44 +1965,40 @@ static int xgbe_is_last_desc(struct xgbe_ring_desc *rdesc) static int xgbe_enable_int(struct xgbe_channel *channel, enum xgbe_int int_id) { - unsigned int dma_ch_ier; - - dma_ch_ier = XGMAC_DMA_IOREAD(channel, DMA_CH_IER); - switch (int_id) { case XGMAC_INT_DMA_CH_SR_TI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TIE, 1); break; case XGMAC_INT_DMA_CH_SR_TPS: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TXSE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TXSE, 1); break; case XGMAC_INT_DMA_CH_SR_TBU: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TBUE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TBUE, 1); break; case XGMAC_INT_DMA_CH_SR_RI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RIE, 1); break; case XGMAC_INT_DMA_CH_SR_RBU: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RBUE, 1); break; case XGMAC_INT_DMA_CH_SR_RPS: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RSE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RSE, 1); break; case XGMAC_INT_DMA_CH_SR_TI_RI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1); - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TIE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RIE, 1); break; case XGMAC_INT_DMA_CH_SR_FBE: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 1); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, FBEE, 1); break; case XGMAC_INT_DMA_ALL: - dma_ch_ier |= channel->saved_ier; + channel->curr_ier |= channel->saved_ier; break; default: return -1; } - XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier); + XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, channel->curr_ier); return 0; } @@ -2009,45 +2006,41 @@ static int xgbe_enable_int(struct xgbe_channel *channel, static int xgbe_disable_int(struct xgbe_channel *channel, enum xgbe_int int_id) { - unsigned int dma_ch_ier; - - dma_ch_ier = XGMAC_DMA_IOREAD(channel, DMA_CH_IER); - switch (int_id) { case XGMAC_INT_DMA_CH_SR_TI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TIE, 0); break; case XGMAC_INT_DMA_CH_SR_TPS: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TXSE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TXSE, 0); break; case XGMAC_INT_DMA_CH_SR_TBU: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TBUE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TBUE, 0); break; case XGMAC_INT_DMA_CH_SR_RI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RIE, 0); break; case XGMAC_INT_DMA_CH_SR_RBU: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RBUE, 0); break; case XGMAC_INT_DMA_CH_SR_RPS: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RSE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RSE, 0); break; case XGMAC_INT_DMA_CH_SR_TI_RI: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 0); - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, TIE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, RIE, 0); break; case XGMAC_INT_DMA_CH_SR_FBE: - XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 0); + XGMAC_SET_BITS(channel->curr_ier, DMA_CH_IER, FBEE, 0); break; case XGMAC_INT_DMA_ALL: - channel->saved_ier = dma_ch_ier & XGBE_DMA_INTERRUPT_MASK; - dma_ch_ier &= ~XGBE_DMA_INTERRUPT_MASK; + channel->saved_ier = channel->curr_ier; + channel->curr_ier = 0; break; default: return -1; } - XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier); + XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, channel->curr_ier); return 0; } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index 4932a44..c7dd273 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -182,8 +182,6 @@ #define XGBE_IRQ_MODE_EDGE 0 #define XGBE_IRQ_MODE_LEVEL 1 -#define XGBE_DMA_INTERRUPT_MASK 0x31c7 - #define XGMAC_MIN_PACKET 60 #define XGMAC_STD_PACKET_MTU 1500 #define XGMAC_MAX_STD_PACKET 1518 @@ -462,6 +460,8 @@ struct xgbe_channel { /* Netdev related settings */ struct napi_struct napi; + /* Per channel interrupt enablement tracker */ + unsigned int curr_ier; unsigned int saved_ier; unsigned int tx_timer_active;