Received: by 2002:ab2:4a89:0:b0:1f4:a8b6:6e69 with SMTP id w9csp21560lqj; Wed, 10 Apr 2024 02:34:48 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUpYZuVyJLnlv5Apug9whLgvpPUjPBS4iIR4gxOIA4f9XDAF29zGwZd2wRkVqcPIR6fvB6i3JMbiyZlAa+LN1UC/XNl0ha5hACF50/SBA== X-Google-Smtp-Source: AGHT+IGA9Bo5WGJgy1cAOAazn/vYfR+WqWmcQd11e9tdGMeWtKlByZsoGqAtldaugzdtg6cT1D7u X-Received: by 2002:a17:903:948:b0:1e4:a120:14f4 with SMTP id ma8-20020a170903094800b001e4a12014f4mr2854480plb.14.1712741688528; Wed, 10 Apr 2024 02:34:48 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712741688; cv=pass; d=google.com; s=arc-20160816; b=oLMUyV+vJ+JnQh9QSh1gbecjQE/9tKKPyLCrhgGXaAnRT2IRmj2FwQD5/NsUYNxc5P QhF0NgFuKadLK/KxgF9hxpBuzbaROaZ8b4goGEsXfa2jyKYdZcizyh+3xCY+gDpozDdx HI0tmN17LjAESyUo1c71Ije3jbdw15dEEZcb2BlZo9lGgGdamCjLductApBFwGgvSiMF F0Ue0IEYh6Oyx8gvZHj9y4iHluYnjiTe2r/r6IsJS+4skcmWDqsO7UE3HBefMfKYkBID vSfQwAvDLR3lNzZ/TTwF5C5pTN2qVrFTeQUOONQvsThPO/J8JJXcE9gfp6IU2tjMFjJF yOLQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=qT2L9De8YkW05zivGysH06k/sTuQS9j+DtTxCa88wj8=; fh=tK2ZwPrzf0wEjErhiOYEkdXvNUDFUxIIS/fYILyFyNs=; b=ZE65m7Z7ChUAGIvLir24ExICSuV3sGlwr8+9kjwYFK7LX2MtVgq0ojCRLbBVvfuWbo YxRGOy9KGT6HIt/4Mb7+8GmGHcpS4kIb8Fli57a+j0rGgLEnTmI5AlrtKgOWIH9ZrLRg X7e6ADamFDj9YBxfXEmME6gfBhf6de8QzgQJWeR3KxCeu0wm28N8oSTFwk3dTfwFz5LD BDWh/CrjOehKcBYugTlwC25oIHrSIeiMizUHGNuchpK2IP3upymosRsaWV5EyAfjR9rU ntR11G9XdgyMef3nWpD8c978nHFyhdPliqj1xKK1gvwyUlIQA1Xaad8LK6lCP+hajQVb 4nBw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=pFRsG+H4; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-138253-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138253-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id t12-20020a170902dccc00b001e3e09beb25si7548022pll.223.2024.04.10.02.34.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 02:34:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-138253-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=pFRsG+H4; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-138253-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-138253-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 3FB95B2435A for ; Wed, 10 Apr 2024 09:29:53 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F05B5158D94; Wed, 10 Apr 2024 09:29:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="pFRsG+H4" Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68B0813D2BC; Wed, 10 Apr 2024 09:29:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.198 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712741357; cv=none; b=F9iyg++h3gZXlRM6njqulEuT1ZAX9L+mmbvwAikb9RJG+IkHZLoXEXFWe91HndfoFiSzOHrccv7Xu38uiAe8xafUUJM/fgOMQw84Fihh1GfsZunPySruVAeQW3fdEcPaLM/qMrvxIRgrOB+pHTmg78/tKg7avEIC7S4cRVw9ImM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712741357; c=relaxed/simple; bh=XllhvdNXULIE3CImgSBufNbbReemMbchd9h8L7I837A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bhyquqH4OiUKY8HeYGlzhFjQvm2PgsGP7EeAfkQOIJH8DYCqfGj7rl5hcSrW0YTGCmGxnD8RjpH4jc+KZ1caNYiun71bM1KhC/wVCViYRSdl4XiVFnn2GaIkq5fL3Rv+BTs+8qlasVr4shGmhrxOa6CxIL1SOLtn/UIUUMJYWok= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=pFRsG+H4; arc=none smtp.client-ip=217.70.183.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 2E23BC0002; Wed, 10 Apr 2024 09:29:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1712741352; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qT2L9De8YkW05zivGysH06k/sTuQS9j+DtTxCa88wj8=; b=pFRsG+H4vyr+tpo0uK0Zr/biVUnYkP/DFrU7kPN2jIbW5xI2MdNCCxYkvLdd1214/RIcrO 50bd/l53bmuI+S0wJiYq4cImG4DxKD436/AiWYKNxhPbCBg+IEehr9YUc5Je/VhcNBQ5+X EH5OItp5myteh3tIVOh7Zv03X9E0SJovHZ0F0VyU5SPDoY+T4qLKacRAYwBLF3OBjriuW6 zlM/jAGZJuoWbIZt12raR0yC5OXKIe2MRoCU5kMI00KE7k67t3nMuEVNo6GQizs35Kz2Fv dOk4d80RpdPemEbmM+GKAxhu0RVXpnW2xu5XSD/jAa1Dwa9cLVw5fn2tat2yzg== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Wed, 10 Apr 2024 11:29:08 +0200 Subject: [PATCH v3 5/9] spi: cadence-qspi: add no-IRQ mode to indirect reads Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20240410-cdns-qspi-mbly-v3-5-7b7053449cf7@bootlin.com> References: <20240410-cdns-qspi-mbly-v3-0-7b7053449cf7@bootlin.com> In-Reply-To: <20240410-cdns-qspi-mbly-v3-0-7b7053449cf7@bootlin.com> To: Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vaishnav Achath , Thomas Bogendoerfer , Rob Herring Cc: linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Vladimir Kondratiev , Gregory CLEMENT , Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.13.0 X-GND-Sasl: theo.lebrun@bootlin.com Support reads through polling, without any IRQ. The main reason is performance; profiling shows that the first IRQ comes quickly on our specific hardware. Once this IRQ arrives, we poll until all data is retrieved. Avoid initial sleep to reduce IRQ count. Hide this behavior behind a quirk flag. This is confirmed through micro-benchmarks, but also end-to-end performance tests. Mobileye EyeQ5, octal flash, reading 235M on a UBIFS filesystem: - No optimizations, ~10.34s, ~22.7 MB/s, 199230 IRQs - CQSPI_SLOW_SRAM, ~10.34s, ~22.7 MB/s, 70284 IRQs - CQSPI_RD_NO_IRQ, ~9.37s, ~25.1 MB/s, 521 IRQs Signed-off-by: Théo Lebrun --- drivers/spi/spi-cadence-quadspi.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c index b499f2e5ec87..cde84d10678e 100644 --- a/drivers/spi/spi-cadence-quadspi.c +++ b/drivers/spi/spi-cadence-quadspi.c @@ -42,6 +42,7 @@ static_assert(CQSPI_MAX_CHIPSELECT <= SPI_CS_CNT_MAX); #define CQSPI_NO_SUPPORT_WR_COMPLETION BIT(3) #define CQSPI_SLOW_SRAM BIT(4) #define CQSPI_NEEDS_APB_AHB_HAZARD_WAR BIT(5) +#define CQSPI_RD_NO_IRQ BIT(6) /* Capabilities */ #define CQSPI_SUPPORTS_OCTAL BIT(0) @@ -702,6 +703,7 @@ static int cqspi_indirect_read_execute(struct cqspi_flash_pdata *f_pdata, const size_t n_rx) { struct cqspi_st *cqspi = f_pdata->cqspi; + bool use_irq = !(cqspi->ddata && cqspi->ddata->quirks & CQSPI_RD_NO_IRQ); struct device *dev = &cqspi->pdev->dev; void __iomem *reg_base = cqspi->iobase; void __iomem *ahb_base = cqspi->ahb_base; @@ -725,17 +727,20 @@ static int cqspi_indirect_read_execute(struct cqspi_flash_pdata *f_pdata, * all the read interrupts disabled for max performance. */ - if (!cqspi->slow_sram) + if (use_irq && cqspi->slow_sram) + writel(CQSPI_REG_IRQ_WATERMARK, reg_base + CQSPI_REG_IRQMASK); + else if (use_irq) writel(CQSPI_IRQ_MASK_RD, reg_base + CQSPI_REG_IRQMASK); else - writel(CQSPI_REG_IRQ_WATERMARK, reg_base + CQSPI_REG_IRQMASK); + writel(0, reg_base + CQSPI_REG_IRQMASK); reinit_completion(&cqspi->transfer_complete); writel(CQSPI_REG_INDIRECTRD_START_MASK, reg_base + CQSPI_REG_INDIRECTRD); while (remaining > 0) { - if (!wait_for_completion_timeout(&cqspi->transfer_complete, + if (use_irq && + !wait_for_completion_timeout(&cqspi->transfer_complete, msecs_to_jiffies(CQSPI_READ_TIMEOUT_MS))) ret = -ETIMEDOUT; @@ -777,7 +782,7 @@ static int cqspi_indirect_read_execute(struct cqspi_flash_pdata *f_pdata, bytes_to_read = cqspi_get_rd_sram_level(cqspi); } - if (remaining > 0) { + if (use_irq && remaining > 0) { reinit_completion(&cqspi->transfer_complete); if (cqspi->slow_sram) writel(CQSPI_REG_IRQ_WATERMARK, reg_base + CQSPI_REG_IRQMASK); -- 2.44.0