From patchwork Wed Aug 14 10:09:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ye Li X-Patchwork-Id: 1146917 X-Patchwork-Delegate: sbabic@denx.de 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=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="I/hpq/dU"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 467ljx5LVqz9sP8 for ; Wed, 14 Aug 2019 20:11:49 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 49203C21E34; Wed, 14 Aug 2019 10:10:10 +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=1.0 required=5.0 tests=FS_WITH_SMALL, SPF_HELO_PASS, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 7F068C21E07; Wed, 14 Aug 2019 10:09:53 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 318E3C21DD4; Wed, 14 Aug 2019 10:09:15 +0000 (UTC) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30049.outbound.protection.outlook.com [40.107.3.49]) by lists.denx.de (Postfix) with ESMTPS id C2957C21C93 for ; Wed, 14 Aug 2019 10:09:14 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O3h5NI3gXDvFl4zGUqhRu5bMyTazb8XhcmIXRDv/nDiBHKm/g1ffMzGX7CuQqGkWYST6ac0ECrck5/JrusuLDamhRFTrcsMJ4tQHG9/NQzrJexCjVZwi9lKypT0vGADToA9ImiK3joyhjTBNSIlPLGUBRJf9pBcr9jdgFYYg1oroR8+v60Mdt0rvr4jXMrWvp+dTC/xrsZhwIBn00iEvLvyV1vC/yrkQ6NcBuuWHRuWw2KSeKFo/0Q5RgMIXhT9tOJvrkiU77dbiktej3rjBd81CoXDpP//oS5CkWB+iA5xfAJ/3l6Vuebimr5uNWzxVHs/yM4ExwFReKwaLk3XFcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4yGMcIwOVvtAee7U2kFyPaZf1l6cCNAx3vrxEJFJ7hg=; b=j+BDDPAYfp0ehAsJj0c3FX8Styf41UOOrZU3MDf0yxb52/GO2yddBg7FAzqhTjlws43Hs8JEKN/76OJEra3q1QAolYB1iLyZmh1mnXFTInQQZRXl2aa/Cjb52XLNIwwdaqwFR8MBISANXYFlOFkdqB6ph8Lf6s4/roXUVHwMAzfY8/ySbtQP0z3JFVv7NYascvP7he/5DyxQxl0m6YYDLndCbfd6r9ZKPd3RkeC+NQWu/ugyntV69iewrNxWnQBr6OdtAGijIHzG34KfkFgW2x3rFZfzSw+ECGOraGCBbspKOA7mYTUN1Vbqurgs+BruC7EYztUHbaCTon0us7HOCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4yGMcIwOVvtAee7U2kFyPaZf1l6cCNAx3vrxEJFJ7hg=; b=I/hpq/dU6A0NktCI31KB2lPV7QisfeFRX273n1TyoRQd435eAGfiHzrN0fBb+TBh+c4fFn12cJDARq/xohChWOd/DHpku99JDx6aEk+Vk1m69Q09FBkwtIMGp+C06Wsimv/YT9zLHfjPm3eojud08MFGb9ROT7aaIC9X6+PIgsw= Received: from VI1PR04MB4414.eurprd04.prod.outlook.com (20.177.55.153) by VI1PR04MB4623.eurprd04.prod.outlook.com (20.177.56.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.20; Wed, 14 Aug 2019 10:09:13 +0000 Received: from VI1PR04MB4414.eurprd04.prod.outlook.com ([fe80::7460:701:b0de:5a5]) by VI1PR04MB4414.eurprd04.prod.outlook.com ([fe80::7460:701:b0de:5a5%4]) with mapi id 15.20.2157.022; Wed, 14 Aug 2019 10:09:13 +0000 From: Ye Li To: "jagan@amarulasolutions.com" Thread-Topic: [PATCH 6/6] spi: fsl_qspi: Fix flash write issue with small TX FIFO Thread-Index: AQHVUohSjav5Xros7UGQxdAt/GqP9Q== Date: Wed, 14 Aug 2019 10:09:13 +0000 Message-ID: <1565777311-1752-6-git-send-email-ye.li@nxp.com> References: <1565777311-1752-1-git-send-email-ye.li@nxp.com> In-Reply-To: <1565777311-1752-1-git-send-email-ye.li@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.7.4 x-clientproxiedby: HK0PR03CA0034.apcprd03.prod.outlook.com (2603:1096:203:2f::22) To VI1PR04MB4414.eurprd04.prod.outlook.com (2603:10a6:803:6e::25) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ye.li@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.68] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 13ae26b2-563a-4138-51be-08d7209f7501 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:VI1PR04MB4623; x-ms-traffictypediagnostic: VI1PR04MB4623: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 01294F875B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(396003)(376002)(346002)(39860400002)(189003)(199004)(44832011)(6916009)(6486002)(50226002)(66556008)(64756008)(66446008)(26005)(14454004)(5660300002)(305945005)(66476007)(5640700003)(66946007)(316002)(66066001)(478600001)(52116002)(486006)(71190400001)(8936002)(7736002)(6436002)(71200400001)(2616005)(11346002)(446003)(53936002)(25786009)(6506007)(76176011)(2501003)(476003)(2906002)(2351001)(102836004)(4326008)(99286004)(81156014)(186003)(6512007)(81166006)(8676002)(256004)(1730700003)(54906003)(386003)(3846002)(36756003)(86362001)(6116002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB4623; H:VI1PR04MB4414.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: e7CKfzTOnytyvb6KhsQzR6F9pAPXNFR5MEaQ0/T7deh9hlC5WEhWz3wcadEvVL7kfGGF91v4/GXGck0MZyMpn6ioEIyx7jF2kM7YXKRcqIdoD0F4g60b9ltKdWm3eYYASiKfClcmh4m7p9lNma/wJxnoM3cxILJ0eG8VlTJBBN+LEg3Vs7+e7sH7MjT2pTEPRPaHguDH4yOQUjJYW7GQtvRm04HyWgbbvOgyuD5MsK+L7h5jCry0H3342UtwFBQJP44F3SGHfFq+ndPjJJL1kBqwN24CAXrSP/No1/NNZnrKJMZtis6f6WCsH9bsSiEqadKkd/W+079mJa6lXBt+0Fohi4H4zvOn/+G5j80/XrVfg8X/FYJCVh+LEWImrBgcbs9pjw9Rh/ROrlIKkGw872na9MHB70pQiFbl1NujIsk= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13ae26b2-563a-4138-51be-08d7209f7501 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Aug 2019 10:09:13.5311 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /avEeSA4VeuZy7jKwTKy1zCIa8sOdle04M7GL3mLF4sKwyI6a4+hv7Nhx7eCN6Dp X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4623 Cc: Fabio Estevam , "u-boot@lists.denx.de" , dl-uboot-imx Subject: [U-Boot] [PATCH 6/6] spi: fsl_qspi: Fix flash write issue with small TX FIFO 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" The page write sequence in spi-mem is changed with orignal spi-flash. When the max_write_size is set by driver, the orignal sequence is 1. WREN 2. write max_write_size data to flash 3. wait for WIP clean 4. back to #1 if having data remained in a page. The new sequence is: 1. WREN 2. write (max_write_size - command length) data to flash 3. back to #2 if having data remained in a page 4. wait for WIP clean If TX FIFO (max_write_size) is small (for example iMX7ULP only has 64 bytes TX FIFO, while other iMX SOCs have 512 bytes), the driver has to check the WIP in step 3. Otherwise the WIP may set due to previous write is not completed by flash device, then cause current write failed. Signed-off-by: Ye Li --- drivers/spi/fsl_qspi.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index f3cf8e6..450155e 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -22,6 +22,7 @@ DECLARE_GLOBAL_DATA_PTR; #define OFFSET_BITS_MASK GENMASK(23, 0) #define FLASH_STATUS_WEL 0x02 +#define FLASH_STATUS_WIP 0x01 /* SEQID */ #define SEQID_WREN 1 @@ -666,6 +667,27 @@ static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len) mcr_reg); qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS); + if (priv->devtype_data->txfifo <= 256) { + status_reg = 0; + do { + WATCHDOG_RESET(); + + qspi_write32(priv->flags, ®s->ipcr, + (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 1); + while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK) + ; + + reg = qspi_read32(priv->flags, ®s->rbsr); + if (reg & QSPI_RBSR_RDBFL_MASK) { + status_reg = qspi_read32(priv->flags, ®s->rbdr[0]); + status_reg = qspi_endian_xchg(priv, status_reg); + } + qspi_write32(priv->flags, ®s->mcr, + qspi_read32(priv->flags, ®s->mcr) | + QSPI_MCR_CLR_RXF_MASK); + } while ((status_reg & FLASH_STATUS_WIP) == FLASH_STATUS_WIP); + } + status_reg = 0; while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) { WATCHDOG_RESET();