From patchwork Mon Mar 21 21:08:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Igal.Liberman" X-Patchwork-Id: 600816 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3qTw0c03Hhz9sD3 for ; Wed, 23 Mar 2016 01:23:28 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=freescale.onmicrosoft.com header.i=@freescale.onmicrosoft.com header.b=MCMKb0nQ; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758960AbcCVOXZ (ORCPT ); Tue, 22 Mar 2016 10:23:25 -0400 Received: from mail-by2on0119.outbound.protection.outlook.com ([207.46.100.119]:18409 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758397AbcCVOXX (ORCPT ); Tue, 22 Mar 2016 10:23:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freescale.onmicrosoft.com; s=selector1-freescale-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=aCDvY2vv9B3h1C0Ug2On3s5rYPP6QvHrN0MpR/SdtgU=; b=MCMKb0nQUwr0d387tVnfFMuMp8H5NNEfKep5qUUbLeNTm8ECK3n+eftCiYm9PNQg0Z4ORxU+CpMm6cTsT9uF5qnv2IW7YzCtFEaRiLo3k6MLqWIK5r3YjxEWgIn6S5xnBP/vUO1WMNa1tEtmTniktB3DnCkyfx51yxaZ8DWHySQ= Received: from BLUPR0301CA0022.namprd03.prod.outlook.com (10.162.113.160) by DM2PR0301MB0768.namprd03.prod.outlook.com (10.160.97.151) with Microsoft SMTP Server (TLS) id 15.1.443.12; Tue, 22 Mar 2016 14:23:20 +0000 Received: from BN1AFFO11FD012.protection.gbl (2a01:111:f400:7c10::105) by BLUPR0301CA0022.outlook.office365.com (2a01:111:e400:5259::32) with Microsoft SMTP Server (TLS) id 15.1.443.12 via Frontend Transport; Tue, 22 Mar 2016 14:23:19 +0000 Authentication-Results: spf=neutral (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Neutral (protection.outlook.com: 192.88.158.2 is neither permitted nor denied by domain of freescale.com) Received: from az84smr01.freescale.net (192.88.158.2) by BN1AFFO11FD012.mail.protection.outlook.com (10.58.52.72) with Microsoft SMTP Server (TLS) id 15.1.443.6 via Frontend Transport; Tue, 22 Mar 2016 14:23:19 +0000 Received: from b31950-Sun-Ultra-20-Workstation.fil.ea.freescale.net ([10.96.120.74]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id u2MENGvw013096; Tue, 22 Mar 2016 07:23:17 -0700 From: To: CC: , , Igal Liberman Subject: [PATCH] fsl/fman: Workaround for Errata A-007273 Date: Mon, 21 Mar 2016 23:08:11 +0200 Message-ID: <1458594492-15529-1-git-send-email-igal.liberman@freescale.com> X-Mailer: git-send-email 1.7.9.5 Reply-To: X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(3190300001)(199003)(189002)(77096005)(50226001)(86362001)(19580405001)(19580395003)(50466002)(2876002)(5003940100001)(2351001)(229853001)(87936001)(33646002)(48376002)(36756003)(86152002)(450100001)(50986999)(1096002)(105586002)(1220700001)(43066003)(53806999)(586003)(47776003)(6806005)(106466001)(81166005)(104016004)(5008740100001)(110136002)(3450700001)(11100500001)(107886002)(2906002)(4001430100002)(4326007)(189998001)(4720700001); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR0301MB0768; H:az84smr01.freescale.net; FPR:; SPF:Neutral; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD012; 1:8/zmeeskH1e7BnokGIc9gp/EbuxCWDU+01jT/XTwZhbL2N9H9W0Jh+u3quTcQg0ILlfVT8BFzJETzhwZBPbv0nht02TNpNhL0QCz9g+K0ruAemTr6cC0Pz07JsbQQCAgRuQ9a14qg8gCPFug5Hyf5I2LFTzb+xM/PJ93qoyNodV7A9sRlZOwUK235lFSrOH9WdCJsiwFsnSgXJ6wa108n16eYdXNSqekskJcNZWAhwEsh0YD9Fflb3xYb5UZ/oeSjncm136elvCA1hMAx1JGHrM7u8LYqpC1tJ3L5nAA1NqVl6kjmd3mI6z83sXEg3W7eK25r6Gz+5Rd4f+K1LOeTP8pxHFAifDMdtd4XshGpQTMQmLsxtbhGg0rOh4Rk0YX0m4r3MX6iVU4853OX9YgxEwR7lNoFJGMO5beAM6IYsccAXiJDmNbJbD2GXVxXev0C3HCWfI1bwCk2TXCYto3ZwcmILhRuP/MNKBUz6bwZZ2lwBuQytsUcBJ8MjK02SrTbu1ViHJJe7r8qAm5n+lzDdWBC0dzZ+nRWq8jbAGlitc= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: c149b923-07b3-44eb-be0a-08d3525d844d X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0768; 2:JO7Y/z9Tp3oy+BETlQD4TLvVeskPEzzl7NekJA1gLVnBYWRGXiwZiRuPUWPMMhfOgBnNNlz7DahBGfy64KrrAta+YUQGD0u9fKWMwGYBVgbyXAhRTtH65kcYIjS+I+Vxgpw3M9CRCr4gI6OyZkKxd890EmBCtRm0cML+cpqbKDWfziBGwMiXgaWr12TBc+0Z; 3:KldPjeC7mvxN0B12AK1VBCV+6iCetDfTAssc5SGI5wBsmMz6RxxrzV5KlnY32Np3KQSyPLGGCOh0csBwJqrTvD2f+1u9GbHuuea1PrZATW6ujMot3yCGIJZn2QBBPRXyyn8VyUWkmJbkL0EVa5hhI9SNh5Xd3Ygd6uzNr5bfrS8yLv+jXQgePrmZaimF9XORN1E/YsWnwVj/BOA53B4Ew3k3/dcwl4v2Mjic+lKABeY=; 25:zg/x22Gs1wwJWhC7cySdYH+hoClPZZe4KJWFNPqu3H3ZH+gIEXbUp8lmudzC+RnfVh8nkPVupaqpDiRvQZHn+cHzAMYN04z0s2gjvk+y2P+RGlJZMEMTPC4HwW82sM4/R7MH3Rch37wSuJZlEqxGXl8sgsoY8/+idYyMSRdmWZH2hR+8WT+b9LuNvgUpgTJneZZcYfwiAde96ix33CVvkgSaQZp+2IKM/QhJTB3rukDR2BmPIyr++28yyLmYPCVnynaUlCdFvIvTKpbARk4957z4XA/N2pvq+3Kbo5JV72sVEPYFYuig1FoDRNF0t41ZiJL956cfNaOTWZiht9hfdpx5pUAioXtSZSn+12VHylWZiuMObIAh23xmwkDUiseexOBhk9cIb7U5JcMFqFVXeW4XsMjFvqcw+jgCCl/MrDCSZJqBcj/1YRMaQGdqo5YQ6KUKThnTCg8Mu5Ry9RaUGG8AgVOPA4gZxjgZutC3ea+8V/+sISFccastykPYK6pyHSGL8q9W59TsdSAlPoahWQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0768; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0768; 20:11O0i81GW6L+bAqhdxSNybC3TFMRV7C4oY5AJUR4EElVyoxls4rdyJi0I8TTrX3GZoWdSVMMaarNJlAUS4oQLzFvyLNMe7IYfED82kjwXPD6FxVMVPNawPI+7xzl9NBEfxGt+iSESvVQcx/UbAzBxPkcizLjj0zFJpoBJXdFdKHvVT2zHUMTgKzTsi39yQ734j25EHIiYWD/2nb8IUIFP2DOWgox0sSsmuoVGUrWjSWd+6F70Lu7k0K3PWEdEOXCq8bd8mmlU1ewtFhTNO4PMHvXdxkMQw9eUZBPKmtxhiRoyInL58K7XG6MoALNj8DzJM3x6nxIXDxJg8ymyGSb1e4KRuiF/xIvJ1GBAlLtjJaMzwgLp823lcy4fSFUx5+lA5tdyaAuidfeZGVNkIljGZzAl+alMFdye4IYlA56Cxj/T63T7gd8VxxPMMafrkuY; 4:ry/WO80Xq6CvDfjbyRTJ/ao1AwJbRdTu2Mp1Dl0FHCae2qwMt3rNJh53mj9tWGWjPVW1TW58EHabxAddbowkhu83r5kfnbX0tZK8KotzslBYC1svDEuLGYomG3vDBugs0nvZvklgQR0RALYwVEqKxLm5taUljAW80+KNJ2Pcm9dzByLfr397E/NFt+8swx4vr6sfa5/Nehjm0OCF1p9Q5q9/8BzlvEvEXDJplqFVyVTU05tnbbQpxo9VIadW0mekETIgdXfjk96A9uncuOKemH34NbdBz1MA2pePTnVO5/g0IhaAWmRjw38WFIa5+Iup98Ht+bxv+Awjko1TdJSk9urwkUAkOejJw0hzTVziGHKray7g0ztshcqd6VzaIQ8zrpe11S4I0MywVKpst0ql0PHiQIhrMC7zSDDzQX6vvMQ2koNEDJXLOOagDjzIT0WeV+VT6KNl0lMLXK08eQyx+Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13024025)(13015025)(13023025)(13017025)(13018025)(5005006)(8121501046)(3002001)(10201501046); SRVR:DM2PR0301MB0768; BCL:0; PCL:0; RULEID:; SRVR:DM2PR0301MB0768; X-Forefront-PRVS: 08897B549D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0768; 23:+G8GAiU1y+HdazXZHY85tU+4455Ey/U6Y7jVmk5?= =?us-ascii?Q?tGJEBDvqXjjRnb9mdyWVJX5tLSb6dLgGoUb/qPfyCH0yJj/y2iCNcQ6WAumD?= =?us-ascii?Q?PR5ptie8KuEZkIoTUuuhKVmyMFcvLARzWH8KZtT1TkGOV9blQiBjJHpZOnBs?= =?us-ascii?Q?5NY+9cOCthSQH8dkutQtJlq9SJ6FVX6AihfDaW5dzaWrBD16dlsotmjqPUB0?= =?us-ascii?Q?18+85IDTRsukSoVwOIWC0BQvoUTPnvk1iToulioL2fPKpVLPlRH2ElNrcKVT?= =?us-ascii?Q?dtubYeMg4jHqgpNSqBe0DYqV0Ie1OgiWpWje16G/2/sAPLaeMu4z0erB1OOR?= =?us-ascii?Q?v4di1+BauL4gWP89BiK9amacjslENRAQVZBBlPPqn38woAao031ih6u9OKAr?= =?us-ascii?Q?fzkFNv2xnX2YPC5OAgW/dkkA9Bf3cAK0FhIFubDmp31ug01jWM59X41cVgm0?= =?us-ascii?Q?XwnIEWn+AYEuOrAQ/ulYZ04288BnTcJI9GOVLCvPkeW9lr7Fwfm01r8WE3kM?= =?us-ascii?Q?tERbtuvH1zywulnFQWM/1aPmz3B8LBxZDbTlQZZCJ3jM2KbUoje7Nw/Hr/DI?= =?us-ascii?Q?6kXf99600M48Hu/FhRIPRVaiQmHGKPjgAGk7L2hI1V+T+6CpcI1tQ4qis2e5?= =?us-ascii?Q?3q3F/RzpGNrqylRYij9sqUc5g7ROOYPqPJXaP+18BzpXc+iJf19V1qXeEIqR?= =?us-ascii?Q?y5IaAhfP7nED7o45Yf7nyxpU6V4d2A2u9lcGruRGe/1qCmj7+/S+5J8sWqjd?= =?us-ascii?Q?EFdoxKKAmKu+vMyhfuZV9jpKKL8dK9ZBnYY9Z9lWriPPNqyzTXJv+n0d35x6?= =?us-ascii?Q?8Fgdx5xdRS+aAN9cGKe54jF71f+059PRdS2+xMTfW/taX/2X7UELIPLlyAam?= =?us-ascii?Q?wkcQ9BveZWbXjKSS1WENi7ZBcd3sZqSm7SEKh+Jtk5bD9Ko2mjN6Lmd7BzoA?= =?us-ascii?Q?eKH/6fP2eo9HgQlaG9b2rsP6RQYRqtycjMGoQvfWNOXrD8ApUPJvxkm8ybxH?= =?us-ascii?Q?pD5923ceHcgo6el/mWClP/Y5l+Q+p1WIr+do4DgPKoQy09TvEjXbCajE1wz/?= =?us-ascii?Q?1rGvNcdV9qkOTUPRQ+mTFRI4i004mvQrsjLHUcfsHTuwYVjTeYL0J5SY3kL9?= =?us-ascii?Q?tXR2WiS8I8/UMEnRKLoVi3hk3WA/PCCQv?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0768; 5:3vcFmTMLfdKCPusoW13jBXtg+lzGMu6kNkntieHuIHFHpAD3NBvKLm7pbgEYRInjPGRg4OdnGalbbLKgVxljq+AL30otUpOcrM6co3GUBAFxf6p0XlGr6GlY5JfoeV6MQD76+ujxPOQQAKXi+tXkCA==; 24:hqtyY5/wLkJkMhdm2iGpPYIIaMgaKMMZInjl24kY1aaI3ugvCROKgJgQDfGPb0wDv4YegetOsh5uaZzoZBHSPXyQ3ZrXlHHLr/xYE6LKpOs= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2016 14:23:19.0751 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0768 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Igal Liberman Errata A-007273 (For FMan V3 devices only): FMan soft reset is not finished properly if one of the Ethernet MAC clocks is disabled Workaround: Re-enable all disabled MAC clocks through the DCFG_CCSR_DEVDISR2 register prior to issuing an FMAN soft reset. Re-disable the MAC clocks after the FMAN soft reset is done. Signed-off-by: Igal Liberman --- drivers/net/ethernet/freescale/fman/fman.c | 104 +++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c index 79a210a..ea83712 100644 --- a/drivers/net/ethernet/freescale/fman/fman.c +++ b/drivers/net/ethernet/freescale/fman/fman.c @@ -35,6 +35,7 @@ #include "fman.h" #include "fman_muram.h" +#include #include #include #include @@ -1871,6 +1872,90 @@ err_fm_state: return -EINVAL; } +static int fman_reset(struct fman *fman) +{ + u32 count; + int err = 0; + + if (fman->state->rev_info.major < 6) { + iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc); + /* Wait for reset completion */ + count = 100; + do { + udelay(1); + } while (((ioread32be(&fman->fpm_regs->fm_rstc)) & + FPM_RSTC_FM_RESET) && --count); + if (count == 0) + err = -EBUSY; + + goto _return; + } else { + struct device_node *guts_node; + struct ccsr_guts __iomem *guts_regs; + u32 devdisr2, reg; + + /* Errata A007273 */ + guts_node = + of_find_compatible_node(NULL, NULL, + "fsl,qoriq-device-config-2.0"); + if (!guts_node) { + dev_err(fman->dev, "%s: Couldn't find guts node\n", + __func__); + goto guts_node; + } + + guts_regs = of_iomap(guts_node, 0); + if (!guts_regs) { + dev_err(fman->dev, "%s: Couldn't map %s regs\n", + __func__, guts_node->full_name); + goto guts_regs; + } +#define FMAN1_ALL_MACS_MASK 0xFCC00000 +#define FMAN2_ALL_MACS_MASK 0x000FCC00 + /* Read current state */ + devdisr2 = ioread32be(&guts_regs->devdisr2); + if (fman->dts_params.id == 0) + reg = devdisr2 & ~FMAN1_ALL_MACS_MASK; + else + reg = devdisr2 & ~FMAN2_ALL_MACS_MASK; + + /* Enable all MACs */ + iowrite32be(reg, &guts_regs->devdisr2); + + /* Perform FMan reset */ + iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc); + + /* Wait for reset completion */ + count = 100; + do { + udelay(1); + } while (((ioread32be(&fman->fpm_regs->fm_rstc)) & + FPM_RSTC_FM_RESET) && --count); + if (count == 0) { + iounmap(guts_regs); + of_node_put(guts_node); + err = -EBUSY; + goto _return; + } + + /* Restore devdisr2 value */ + iowrite32be(devdisr2, &guts_regs->devdisr2); + + iounmap(guts_regs); + of_node_put(guts_node); + + goto _return; + +guts_regs: + of_node_put(guts_node); +guts_node: + dev_dbg(fman->dev, "%s: Didn't perform FManV3 reset due to Errata A007273!\n", + __func__); + } +_return: + return err; +} + static int fman_init(struct fman *fman) { struct fman_cfg *cfg = NULL; @@ -1914,22 +1999,9 @@ static int fman_init(struct fman *fman) fman->liodn_base[i] = liodn_base; } - /* FMan Reset (supported only for FMan V2) */ - if (fman->state->rev_info.major >= 6) { - /* Errata A007273 */ - dev_dbg(fman->dev, "%s: FManV3 reset is not supported!\n", - __func__); - } else { - iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc); - /* Wait for reset completion */ - count = 100; - do { - udelay(1); - } while (((ioread32be(&fman->fpm_regs->fm_rstc)) & - FPM_RSTC_FM_RESET) && --count); - if (count == 0) - return -EBUSY; - } + err = fman_reset(fman); + if (err) + return err; if (ioread32be(&fman->qmi_regs->fmqm_gs) & QMI_GS_HALT_NOT_BUSY) { resume(fman->fpm_regs);