From patchwork Fri Mar 20 09:37:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tudor Ambarus X-Patchwork-Id: 1258843 X-Patchwork-Delegate: jagannadh.teki@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-microchiptechnology-onmicrosoft-com header.b=BVE/t0a1; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48kLp14fTjz9sSL for ; Fri, 20 Mar 2020 22:16:57 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 404E781662; Fri, 20 Mar 2020 12:16:41 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="BVE/t0a1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 96D5B800DF; Fri, 20 Mar 2020 10:38:08 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from esa1.microchip.iphmx.com (esa1.microchip.iphmx.com [68.232.147.91]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id F3136800DF for ; Fri, 20 Mar 2020 10:38:02 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=Tudor.Ambarus@microchip.com IronPort-SDR: W63SkREsP8hTRiAdUxV/LI3WjH2U6elf9I3I8cGtI+F3mF+Iuc4olxBxUjOCg5kaREqwAiiu0q NPEKlfeTxgkd5FhQGGwr2CD7foUfBAzi9rLUPyW55sNy3Ddhs6z53JGJADMrixq+i9pz8ZnTrr QbR3uHhDpr1O0IIeQ7af0AyzLAQ0gKF5wpjFOKNGp8BnMZLqZELRmWdEEbXrO/iINZCRBWASjB 0jC+SablTBWMwkbzQxkHlpDx7nGfu03yZMgghuzLRIgax6L/MGN3TPUUjTx772W/ay4dwDOa0f nQY= X-IronPort-AV: E=Sophos;i="5.72,284,1580799600"; d="scan'208";a="72830675" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 20 Mar 2020 02:38:01 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.85.144) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Mar 2020 02:38:01 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Fri, 20 Mar 2020 02:38:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bQB+3KGexE4hiGoOnlEhyYjmQkPeB3/fsKWhF66O3anJcsLQn6MUhcW54+yhwqYB0fxJj33p/P56C9O+Hhzf8XpFAwB7QxKYWVrsu3MpeGFB2BR893FDqua7TlmKwuHqSAF9Odi01a6zrOMeWb70AwJiremnBgaa145Qo30q26yrCGFnV7CvzkdPdzX53UYftHP41MI0FY4zdRG/XnwT+lEt+YpOVcKggP6rhiz1KFcihoNcdXXgPJYxDlyKCaW9ACQ72tQ4eF8HwfH6z6DWF14TCXn95xgU0Pqa9HxmquhohbJ9Ebz5Az3ku95K9AproOugpvLAMA/ICCF9ZR7u1g== 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=JvCQ1B16U0Kraj9CD41RMhjZg4/rrtCYC10IZGpjhn4=; b=gV1wEPRTbZhdxp9qMvrJFxNNcU+RUncVOMqbc/ax4QJ06BklOBzVgho+7e4rNtkEj3M+b2xmtjDBpLgcB2aPKGXc6oRpR7Rgathta36vpSYS3UQtEfmHwWWI7iwhokwaahAVhCd+K2n5+6fkRbU6VIiS2bj7fjKeP2ghi266qwIjhBDUCCdImVYP7gKgbNejU1ocQW5qM0SOngJdQ+e8hiNLvzyvAzTaO3kFpQMqgDotSYRgzvrtBpm8DMo++FEivdnhbRuA01hkf18uIrOkj1x4qcDRC/JzDaTWfn/LqFUUL2G8rdOiZyfHC4miynVIFezrQt/hu9ahzBT7iCr7oA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JvCQ1B16U0Kraj9CD41RMhjZg4/rrtCYC10IZGpjhn4=; b=BVE/t0a1fn7KxJblIaGqtGv+PEAXdfANqeH7nA/mvv8w7jcNsnV4YrKj34IMR2BMUQlREMdKELLe32zzuwHUWQrFiYUhkCFXVuHQGgb96UQY1mO8/Uq2JQKyxtD6B2rUT8rSDBRBPLEJZRfAlbcobjeYzkf9cWw+5l/10QlSVTc= Received: from MN2PR11MB4448.namprd11.prod.outlook.com (2603:10b6:208:193::29) by MN2PR11MB3999.namprd11.prod.outlook.com (2603:10b6:208:154::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.19; Fri, 20 Mar 2020 09:37:59 +0000 Received: from MN2PR11MB4448.namprd11.prod.outlook.com ([fe80::b515:d8f2:b5f5:245f]) by MN2PR11MB4448.namprd11.prod.outlook.com ([fe80::b515:d8f2:b5f5:245f%7]) with mapi id 15.20.2835.017; Fri, 20 Mar 2020 09:37:59 +0000 From: To: , CC: , Subject: [u-boot][PATCH 1/2] spi: atmel-quadspi: fix possible MMIO window size overrun Thread-Topic: [u-boot][PATCH 1/2] spi: atmel-quadspi: fix possible MMIO window size overrun Thread-Index: AQHV/ps+gHdlq3Qdd068MWm4jMx3GQ== Date: Fri, 20 Mar 2020 09:37:59 +0000 Message-ID: <20200320093755.921306-1-tudor.ambarus@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Tudor.Ambarus@microchip.com; x-originating-ip: [94.177.32.156] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ca689646-872b-43e3-fb3f-08d7ccb260be x-ms-traffictypediagnostic: MN2PR11MB3999: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:4714; x-forefront-prvs: 03484C0ABF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(376002)(39860400002)(346002)(396003)(199004)(2616005)(76116006)(91956017)(71200400001)(1076003)(86362001)(2906002)(478600001)(36756003)(54906003)(110136005)(4326008)(316002)(5660300002)(186003)(26005)(6506007)(66556008)(107886003)(6512007)(81166006)(66446008)(81156014)(6486002)(64756008)(8936002)(66476007)(8676002)(66946007); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR11MB3999; H:MN2PR11MB4448.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vaMuSEMDW2JJPybHSrd8lEUVyds5nuI3slBSsBV5QPvqUmiQtw33ZRj2wbS9bZXUmZ3IDD4rf8JfBUhSwhhURl5Ma+VmH6t/PnTR6J34GD5TOqU5sayMx2EUUi/UytnNRvBu3DrqIOjqY4wnFO8OoOPPBLADNJXCjGZydYQgyugyOu7oJ/b6J7ZkL0f1W7gL9cWmjThYGMrAQCsjwWKFOzOmpsFLO66FGexIRfgOhlUXBgVd7yXjwCUquGrGt807fNFDTTHbbIzODxP3qYPIqHID/S0zKvSheMx0X0UFhi4eRN4G3/Ub6oJlPWt+NGA9qCcPVJI4YM2MH684Uk+M3SeSjySocchwUkH6x8lxW/GBSkulhKKI378SCVkf6IPN+a4wr6uIU1vwHItglbLZOn29vsGLKpICN0wW1TLNLtcZ/ThmINmwT/sBwntiVbXj x-ms-exchange-antispam-messagedata: nsgPFMTo5/DJTAQGP6YbW0T5IeTLe0V3IQ/U1l31ezeoVHCNBwDC1i2S2KHRQOGvht0iicU4i5frl4RyNFdl7RE9bUbI+Yhc9P13LGgi1h4ndKhcobzjCS88OCLrHuJzP9P8lvYzfLQslty4k8SfoQ== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: ca689646-872b-43e3-fb3f-08d7ccb260be X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Mar 2020 09:37:59.3799 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZX99CqcDwFd97AJ9zNN2hos3VmPlTepKbtBbYV2dt4XJSIqnO3ghKyWPtkbA3MrG/GvgjXc0RiSlL5qll72iIrVkiLMto4lCxYQlOQJqflY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3999 X-Mailman-Approved-At: Fri, 20 Mar 2020 12:16:37 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 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" X-Virus-Scanned: clamav-milter 0.102.2 at phobos.denx.de X-Virus-Status: Clean From: Tudor Ambarus The sama5d2 QSPI controller memory space is limited to 128MB: 0x9000_00000-0x9800_00000/0XD000_0000--0XD800_0000. There are nor flashes that are bigger in size than the memory size supported by the controller: Micron MT25QL02G (256 MB). Check if the address exceeds the MMIO window size. An improvement would be to add support for regular SPI mode and fall back to it when the flash memories overrun the controller's memory space. Fixes: 24c8ff4684c5 ("spi: Add Atmel QuadSPI driver") Signed-off-by: Tudor Ambarus --- drivers/spi/atmel-quadspi.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c index a09bf884e837..4099ee87993d 100644 --- a/drivers/spi/atmel-quadspi.c +++ b/drivers/spi/atmel-quadspi.c @@ -146,6 +146,7 @@ struct atmel_qspi_caps { struct atmel_qspi { void __iomem *regs; void __iomem *mem; + resource_size_t mmap_size; const struct atmel_qspi_caps *caps; ulong bus_clk_rate; u32 mr; @@ -326,6 +327,14 @@ static int atmel_qspi_exec_op(struct spi_slave *slave, u32 sr, imr, offset; int err; + /* + * Check if the address exceeds the MMIO window size. An improvement + * would be to add support for regular SPI mode and fall back to it + * when the flash memories overrun the controller's memory space. + */ + if (op->addr.val + op->data.nbytes > aq->mmap_size) + return -ENOTSUPP; + err = atmel_qspi_set_cfg(aq, op, &offset); if (err) return err; @@ -490,6 +499,8 @@ static int atmel_qspi_probe(struct udevice *dev) if (IS_ERR(aq->mem)) return PTR_ERR(aq->mem); + aq->mmap_size = resource_size(&res); + ret = atmel_qspi_enable_clk(dev); if (ret) return ret; From patchwork Fri Mar 20 09:37:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tudor Ambarus X-Patchwork-Id: 1258844 X-Patchwork-Delegate: jagannadh.teki@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-microchiptechnology-onmicrosoft-com header.b=FiG1b8Kj; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48kLpC6jflz9sSK for ; Fri, 20 Mar 2020 22:17:07 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2AAD681737; Fri, 20 Mar 2020 12:16:44 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="FiG1b8Kj"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5D536801D2; Fri, 20 Mar 2020 10:38:11 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from esa1.microchip.iphmx.com (esa1.microchip.iphmx.com [68.232.147.91]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 69BEB801D2 for ; Fri, 20 Mar 2020 10:38:06 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=Tudor.Ambarus@microchip.com IronPort-SDR: wUIYncTnnx96SvonpwzVQutt7JFd6WaNOvUblMSv+m2wqroCrcKHlW3NrU1RludqawDtmopnAs N3JbWKrSnSfZwR8PI5ypGpezUfIDuqTd5m2er7AWJAcjqecOIeOwnWTfIU8u0eMX7AXCyzVUti AIxqAgt39MGfKyNNKhEIeLuPAD939Jaqapbivv+y2bWmFcej0b9WkbvC8p8oUTds8J5qzdPMKz ZHNomVTF7ZDAWlzluHibuMHGbpQOL2U1BV4uOkot9cbVfBaSWXTnfwDtslSGLofNLsm+Y8MAYL /ek= X-IronPort-AV: E=Sophos;i="5.72,284,1580799600"; d="scan'208";a="72830678" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 20 Mar 2020 02:38:01 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.85.144) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Mar 2020 02:38:01 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Fri, 20 Mar 2020 02:38:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d6qgUFreAGThrHEe4pJAUo+BE0b8u2CqBi6aLq2xtrzaxj9J7SXHsgSq3Pwsb9CkKwjXtOH22639nweY630UKZkTALxfD5hiUN9R+StTnMc2iMCRZYTrabCA20Q6bwAk1ttLUWZ4MPyXkvQsUJeBzlRasc9Xtw18Nx0B0YqzIfoWi2Go2KfeGqK9mRDElQ4I+OASNFtYmxv6vSkxhMaeGGx1ndc6xyAnNmCOWGfHjzX1uCLbOXn+c5YkIjzdssxBSqBwSBKIk469nSfXV0yFdPYkyQ8NCtC329FG/aUTamFymCWp19W6RKUylw7E9/yFDosf27ysZVQG3Hc6A5y14w== 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=WakzMSwAgPJRPa46gGXoEydGAKsEKRxX6XjjhVQNcHo=; b=efwq62eDagj+hH43Yll1kEaQjcog83hwh6NGPzbTgq/csyPy2HIqxlhTfGMUP9DHepVDElWsjO38Bl10UQ4Bppj4+zYGh/9q9MaDUQ6WJn1f5pTqWXTWiq1pRbCFBgIVN8flSyy1gpJTKIFLcx9cVm/jRFoTR0byq2LYh0aiOjjWq6YY3kfOR05iXx28mL/VK43zhygdF4RTtuVkZrEYKUidk5wkfOk7RrBQLp3SmNLsB/hU0iVc3Sqm66lxXRwi+RprC1k1YnkfkOeU5Re1jWKrTtphBGtj1C1meUZpOSZgDsm501v8HYS6QvL8duYTrgDwIVi7VEjxImEUfEt8fA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WakzMSwAgPJRPa46gGXoEydGAKsEKRxX6XjjhVQNcHo=; b=FiG1b8KjvDtZcgW2S54MP/dCxqDzMrlb3TafTm4fgir8ADfxWlwNfwdCrFvpUr3EYB7PKLgl4mztngCaBBbNStXKKeMf7G0fp3AsIhv2M2rBf6zEaxAsUm/viZqnpZrcQi0xnS5B3PKtf2pJ+jc0/VrVTnU4c2duPsjKNDRohq4= Received: from MN2PR11MB4448.namprd11.prod.outlook.com (2603:10b6:208:193::29) by MN2PR11MB3999.namprd11.prod.outlook.com (2603:10b6:208:154::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.19; Fri, 20 Mar 2020 09:38:00 +0000 Received: from MN2PR11MB4448.namprd11.prod.outlook.com ([fe80::b515:d8f2:b5f5:245f]) by MN2PR11MB4448.namprd11.prod.outlook.com ([fe80::b515:d8f2:b5f5:245f%7]) with mapi id 15.20.2835.017; Fri, 20 Mar 2020 09:38:00 +0000 From: To: , CC: , Subject: [u-boot][PATCH 2/2] spi: atmel-quadspi: Add verbose debug facilities to monitor register accesses Thread-Topic: [u-boot][PATCH 2/2] spi: atmel-quadspi: Add verbose debug facilities to monitor register accesses Thread-Index: AQHV/ps+9NVXkuHXdUCCJOk5MFd9dg== Date: Fri, 20 Mar 2020 09:37:59 +0000 Message-ID: <20200320093755.921306-2-tudor.ambarus@microchip.com> References: <20200320093755.921306-1-tudor.ambarus@microchip.com> In-Reply-To: <20200320093755.921306-1-tudor.ambarus@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Tudor.Ambarus@microchip.com; x-originating-ip: [94.177.32.156] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 83e14f40-88b2-47c7-795e-08d7ccb2612c x-ms-traffictypediagnostic: MN2PR11MB3999: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:2150; x-forefront-prvs: 03484C0ABF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(376002)(39860400002)(346002)(396003)(199004)(2616005)(76116006)(91956017)(71200400001)(1076003)(86362001)(2906002)(478600001)(36756003)(54906003)(110136005)(4326008)(316002)(5660300002)(186003)(26005)(6506007)(66556008)(107886003)(6512007)(81166006)(66446008)(81156014)(6486002)(64756008)(8936002)(66476007)(8676002)(66946007); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR11MB3999; H:MN2PR11MB4448.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dGIZNpKztJVPC+3Q5ZrK0W0qo66Knjj5j3CoVP0gBDWeGiYWtOR+z92DwQn2JnjGv+0FOPFafSkUwyCNqov7FehJzZTWBkNIl2Gd8hIl/2xD+RNsSJsbU//0vQQ15KDyoGGrD5wCfq5Gp4guzH8/8w0M/Vrlc5N/US0dmjNiwfWnBRm03sViR/ts6LgtP6EgGipYxTwUF6z8ahVdI7cOCe4+ZKvSL7pRE3qccQuYVkhzWRJ6Fnwh1RHJtjMK1oDIY/vQruT/8wohoGdaivL89qb8slHo6IoX+cs2hFt7jFUdrHwG0/JGr3trF0Kr43QXCf92KpknKqCm+Tzdus8mKY7NtfZNy4cWBJxpyKiEWJZO/X+6vEvqz5rtN+LxYlT1acq004aZGxj0SLZZ9o8NhLh0RMmpCcBMiO6Adt0kxc1k4GnHc7OdcLWHDPiuO3sM x-ms-exchange-antispam-messagedata: tHO2WYiMwbF4KqNwOW1j56liOrtLhitlB/gE3RFcw3ipmNH7YXjKD6p1xU/fErBcq/kacsIef+1mZV13NJcc4ialluby87H8QvparifB7s/k7TFft2+zlbQrMIR9CXayO8IQR0gk8pLAMa22NfKJvg== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 83e14f40-88b2-47c7-795e-08d7ccb2612c X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Mar 2020 09:37:59.8126 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Mp0JabqnvVxvYBl/svFOeWvEESJ97LZy/C8jGmDmhZaD1kaiaN9DPy5378Flw1MInUpaCUztJYclPn1emNjUFFbVnsW6oL+tl0uhnQF1NfA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3999 X-Mailman-Approved-At: Fri, 20 Mar 2020 12:16:37 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 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" X-Virus-Scanned: clamav-milter 0.102.2 at phobos.denx.de X-Virus-Status: Clean From: Tudor Ambarus This feature should not be enabled in release but can be useful for developers who need to monitor register accesses at some specific places. Helped me identify a bug in u-boot, by comparing the register accesses from the u-boot driver with the ones from its linux variant. Signed-off-by: Tudor Ambarus --- drivers/spi/atmel-quadspi.c | 114 ++++++++++++++++++++++++++++++------ 1 file changed, 96 insertions(+), 18 deletions(-) diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c index 4099ee87993d..3de367e6a0c8 100644 --- a/drivers/spi/atmel-quadspi.c +++ b/drivers/spi/atmel-quadspi.c @@ -148,6 +148,7 @@ struct atmel_qspi { void __iomem *mem; resource_size_t mmap_size; const struct atmel_qspi_caps *caps; + struct udevice *dev; ulong bus_clk_rate; u32 mr; }; @@ -169,6 +170,81 @@ static const struct atmel_qspi_mode atmel_qspi_modes[] = { { 4, 4, 4, QSPI_IFR_WIDTH_QUAD_CMD }, }; +#ifdef VERBOSE_DEBUG +static const char *atmel_qspi_reg_name(u32 offset, char *tmp, size_t sz) +{ + switch (offset) { + case QSPI_CR: + return "CR"; + case QSPI_MR: + return "MR"; + case QSPI_RD: + return "MR"; + case QSPI_TD: + return "TD"; + case QSPI_SR: + return "SR"; + case QSPI_IER: + return "IER"; + case QSPI_IDR: + return "IDR"; + case QSPI_IMR: + return "IMR"; + case QSPI_SCR: + return "SCR"; + case QSPI_IAR: + return "IAR"; + case QSPI_ICR: + return "ICR/WICR"; + case QSPI_IFR: + return "IFR"; + case QSPI_RICR: + return "RICR"; + case QSPI_SMR: + return "SMR"; + case QSPI_SKR: + return "SKR"; + case QSPI_WPMR: + return "WPMR"; + case QSPI_WPSR: + return "WPSR"; + case QSPI_VERSION: + return "VERSION"; + default: + snprintf(tmp, sz, "0x%02x", offset); + break; + } + + return tmp; +} +#endif /* VERBOSE_DEBUG */ + +static u32 atmel_qspi_read(struct atmel_qspi *aq, u32 offset) +{ + u32 value = readl(aq->regs + offset); + +#ifdef VERBOSE_DEBUG + char tmp[8]; + + dev_vdbg(aq->dev, "read 0x%08x from %s\n", value, + atmel_qspi_reg_name(offset, tmp, sizeof(tmp))); +#endif /* VERBOSE_DEBUG */ + + return value; +} + +static void atmel_qspi_write(u32 value, struct atmel_qspi *aq, u32 offset) +{ +#ifdef VERBOSE_DEBUG + char tmp[8]; + + dev_vdbg(aq->dev, "write 0x%08x into %s\n", value, + atmel_qspi_reg_name(offset, tmp, sizeof(tmp))); +#endif /* VERBOSE_DEBUG */ + + writel(value, aq->regs + offset); +} + static inline bool atmel_qspi_is_compatible(const struct spi_mem_op *op, const struct atmel_qspi_mode *mode) { @@ -289,32 +365,32 @@ static int atmel_qspi_set_cfg(struct atmel_qspi *aq, * Serial Memory Mode (SMM). */ if (aq->mr != QSPI_MR_SMM) { - writel(QSPI_MR_SMM, aq->regs + QSPI_MR); + atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); aq->mr = QSPI_MR_SMM; } /* Clear pending interrupts */ - (void)readl(aq->regs + QSPI_SR); + (void)atmel_qspi_read(aq, QSPI_SR); if (aq->caps->has_ricr) { if (!op->addr.nbytes && op->data.dir == SPI_MEM_DATA_IN) ifr |= QSPI_IFR_APBTFRTYP_READ; /* Set QSPI Instruction Frame registers */ - writel(iar, aq->regs + QSPI_IAR); + atmel_qspi_write(iar, aq, QSPI_IAR); if (op->data.dir == SPI_MEM_DATA_IN) - writel(icr, aq->regs + QSPI_RICR); + atmel_qspi_write(icr, aq, QSPI_RICR); else - writel(icr, aq->regs + QSPI_WICR); - writel(ifr, aq->regs + QSPI_IFR); + atmel_qspi_write(icr, aq, QSPI_WICR); + atmel_qspi_write(ifr, aq, QSPI_IFR); } else { if (op->data.dir == SPI_MEM_DATA_OUT) ifr |= QSPI_IFR_SAMA5D2_WRITE_TRSFR; /* Set QSPI Instruction Frame registers */ - writel(iar, aq->regs + QSPI_IAR); - writel(icr, aq->regs + QSPI_ICR); - writel(ifr, aq->regs + QSPI_IFR); + atmel_qspi_write(iar, aq, QSPI_IAR); + atmel_qspi_write(icr, aq, QSPI_ICR); + atmel_qspi_write(ifr, aq, QSPI_IFR); } return 0; @@ -342,7 +418,7 @@ static int atmel_qspi_exec_op(struct spi_slave *slave, /* Skip to the final steps if there is no data */ if (op->data.nbytes) { /* Dummy read of QSPI_IFR to synchronize APB and AHB accesses */ - (void)readl(aq->regs + QSPI_IFR); + (void)atmel_qspi_read(aq, QSPI_IFR); /* Send/Receive data */ if (op->data.dir == SPI_MEM_DATA_IN) @@ -353,7 +429,7 @@ static int atmel_qspi_exec_op(struct spi_slave *slave, op->data.nbytes); /* Release the chip-select */ - writel(QSPI_CR_LASTXFER, aq->regs + QSPI_CR); + atmel_qspi_write(QSPI_CR_LASTXFER, aq, QSPI_CR); } /* Poll INSTruction End and Chip Select Rise flags. */ @@ -375,12 +451,12 @@ static int atmel_qspi_set_speed(struct udevice *bus, uint hz) new_value = QSPI_SCR_SCBR(scbr); mask = QSPI_SCR_SCBR_MASK; - scr = readl(aq->regs + QSPI_SCR); + scr = atmel_qspi_read(aq, QSPI_SCR); if ((scr & mask) == new_value) return 0; scr = (scr & ~mask) | new_value; - writel(scr, aq->regs + QSPI_SCR); + atmel_qspi_write(scr, aq, QSPI_SCR); return 0; } @@ -397,12 +473,12 @@ static int atmel_qspi_set_mode(struct udevice *bus, uint mode) mask = QSPI_SCR_CPOL | QSPI_SCR_CPHA; - scr = readl(aq->regs + QSPI_SCR); + scr = atmel_qspi_read(aq, QSPI_SCR); if ((scr & mask) == new_value) return 0; scr = (scr & ~mask) | new_value; - writel(scr, aq->regs + QSPI_SCR); + atmel_qspi_write(scr, aq, QSPI_SCR); return 0; } @@ -455,14 +531,14 @@ free_pclk: static void atmel_qspi_init(struct atmel_qspi *aq) { /* Reset the QSPI controller */ - writel(QSPI_CR_SWRST, aq->regs + QSPI_CR); + atmel_qspi_write(QSPI_CR_SWRST, aq, QSPI_CR); /* Set the QSPI controller by default in Serial Memory Mode */ - writel(QSPI_MR_SMM, aq->regs + QSPI_MR); + atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); aq->mr = QSPI_MR_SMM; /* Enable the QSPI controller */ - writel(QSPI_CR_QSPIEN, aq->regs + QSPI_CR); + atmel_qspi_write(QSPI_CR_QSPIEN, aq, QSPI_CR); } static int atmel_qspi_probe(struct udevice *dev) @@ -505,6 +581,8 @@ static int atmel_qspi_probe(struct udevice *dev) if (ret) return ret; + aq->dev = dev; + atmel_qspi_init(aq); return 0;