From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F9FF35CBD7 for ; Tue, 16 Jun 2026 12:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781612857; cv=none; b=uUfqZ7BZoDoH7IAUxmXAhLKerPWqjzeFDteD+PRAsbHt5qopdbpmA/wRV8lBl+TvLoO9DRN+KRnYcggR/fwFt6UwE/9+uGZvnbsKuCmGSBg2Fa472gydY//HMjlEhgD1CJfBCQPF+teNAw+M0rxH9TAAfDakChitK0kagydhf2o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781612857; c=relaxed/simple; bh=KNS1cKXInLQZxkR7LHfU2zXc7rmttuhI5LIzHA7EPoc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=gELCceohLjI0tnzkBcuwDQRJOa16InmpiEe4E0OaQVN0iMMRaY1cCVziazNeVHTEjlwYDw0gJ4A/lbSNINBRqsfzXRjCV/hjmLWXfP9qs2M/yVotiGIPJXr9EfXvovk4Hx0YGohiS7KqQkMkE4CEsF9elmQTOVEMFZLldGFoVUk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nPu58oFS; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nPu58oFS" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-c8589498839so1871799a12.2 for ; Tue, 16 Jun 2026 05:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781612855; x=1782217655; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=2upLEhcEPsBGDX8WqyzO3sD02fVNZKxUDLDhAXzyQxU=; b=nPu58oFSvrHlfpFjoZwBRSL4woVNFL/IMCt1XehjI0U1VUdGs6s/lab8qG01kaiFXt Jk/Wu7zBIPsOVaF6V/0iV0uADtcI2prhiWYoE5ta3HuhESMQP82WKnm8hBGugaEgY8KD 6YPVsZAa2cQ2rfX2rttPkgcSna3eARYHiGn11Vu4MmYdzMGbyCRM3y5LMNqZw4WhK3eT treeq/d++TAOINcnwHQQTuhLjd4qSpuX8d4nLRk9RCGGpSAlAI+kGioGjrmZmF6ILO2v 9kej6YdhTwdPoXo4ri493iFtz7d/K3XtvSdi3ZKvLTwKSFxyjKS3jH9GsxvVKgsVknRK bjYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781612855; x=1782217655; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2upLEhcEPsBGDX8WqyzO3sD02fVNZKxUDLDhAXzyQxU=; b=RkhxIsBWVt45hjLmJNoY1NySehoC51plLJ6QtzVEPbGE7y893/ySkRrk+KjTztaUiV DwONEGXkNVr78JdsBFYQufg53KPFT7WCpGKNWbo2i0iECZy0n5xoK9yTVyMwvAJVi5HR R1JigNyXqHmoYOAhLaUGkTdOCGJirqo65hTNYyw+9k0gZQducPp4hOt3mR/UGhWXxr+Z jSW6rxaWYYVkkM9EB5W3UQUo6SUrF4osAFhc1cNuumJx9W8kcTtWv/xgmyPO1+gw1AI7 yMcZsJAAtqGtwbdRyPlyhiLLhkUGt91y9+REV7SsH7AOp1Nj+36O3zEdFVsyxGuFiLcZ xaGA== X-Forwarded-Encrypted: i=1; AFNElJ+nVONR5sXiarkvGqcGq64l5dkStdJbcofNCq2Xf92Gs3Z3jwVyAlU9Iha9oD5ny2U4yUoCoKdO8O3Jqq8=@vger.kernel.org X-Gm-Message-State: AOJu0YwaM+S9Kr8nZf2ECXaXRPAVDkMHaSW0fWjBrEwywWnAEzFmhdO6 ktrg+Ce28kOt89y+YZ8kRsR73tXaKwujABPBiCVBvt1z6p3mSANOntJv X-Gm-Gg: Acq92OH3rcnra13nrKeNF127hst8Cb8984a0msLDILJh6ntkPTPCaJJsPA5Dm01bSRJ BIUFm4QTTTxXbAXZmhxucyBDqCwyd3hyJgYSV+sdLRsd1xqap//o6fIj17h74nzwIJUrDL4lGxI vg3cUnj8mFtuZgyfzqSZ6FcBuMcC3GUotUBr6vGXMu93sxaWcRfg49KO/FOYbDkEQClsNAneqgD jhO/o0pThj0W8GJxnnwR3reDpLpH3FyQ2WGaEaV2/W2CTsjbQZfspDuAaH8i47z+e38lpUNMKCL QtGxurfPYYNuhSwEbUXEsvyYwErFESHAuKkid/ltlpORcPT26hftPn1xGZ0Ww5dFd6ZhGoRCUWw Nf6fRkxcJa+5TJBwJ4CHLEy6YHHoTbZMlzSkE6OzfWEJGXA7vr24jgS7kYmlDDQ145g+105EGnP 7CD9HDq0hQjau3CR2aW5ja X-Received: by 2002:a05:6a21:6190:b0:3b4:81b4:9b79 with SMTP id adf61e73a8af0-3b79642264bmr17424361637.40.1781612855241; Tue, 16 Jun 2026 05:27:35 -0700 (PDT) Received: from nuvole ([2408:844c:a00:6006:ce44:869e:4d94:f839]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c8665186828sm10663771a12.21.2026.06.16.05.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2026 05:27:34 -0700 (PDT) From: Pengyu Luo To: Mark Brown , Krzysztof Kozlowski , Konrad Dybcio Cc: linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Pengyu Luo , Dmitry Baryshkov Subject: [PATCH v2] spi: qcom-geni: Use GSI mode if DMA channels are available Date: Tue, 16 Jun 2026 20:26:05 +0800 Message-ID: <20260616122605.668908-1-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Some devices (such as gaokun3) do not disable FIFO mode, causing the driver to fallback to FIFO mode by default. However, these platforms also support GSI mode, which is highly preferred for certain peripherals like SPI touchscreens to improve performance. So try GSI mode by getting DMA channels first, fallback to fifo mode if it fails. Suggested-by: Dmitry Baryshkov Signed-off-by: Pengyu Luo --- Changes in v2: - Determine mode by checking DMA channels. (Dmitry) - Link to v1: https://lore.kernel.org/linux-arm-msm/20260614083424.464132-1-mitltlatltl@gmail.com --- drivers/spi/spi-geni-qcom.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c index 26e723cfea61..d2fcd0bb0732 100644 --- a/drivers/spi/spi-geni-qcom.c +++ b/drivers/spi/spi-geni-qcom.c @@ -654,26 +654,21 @@ static int spi_geni_init(struct spi_geni_master *mas) else mas->oversampling = 1; - fifo_disable = readl(se->base + GENI_IF_DISABLE_RO) & FIFO_IF_DISABLE; - switch (fifo_disable) { - case 1: - ret = spi_geni_grab_gpi_chan(mas); - if (!ret) { /* success case */ - mas->cur_xfer_mode = GENI_GPI_DMA; - geni_se_select_mode(se, GENI_GPI_DMA); - dev_dbg(mas->dev, "Using GPI DMA mode for SPI\n"); - break; - } else if (ret == -EPROBE_DEFER) { - goto out_pm; - } - /* - * in case of failure to get gpi dma channel, we can still do the - * FIFO mode, so fallthrough - */ - dev_warn(mas->dev, "FIFO mode disabled, but couldn't get DMA, fall back to FIFO mode\n"); - fallthrough; + /* Try GPI DMA mode first, fallback to fifo mode if it fails. */ + ret = spi_geni_grab_gpi_chan(mas); + if (!ret) { /* success case */ + mas->cur_xfer_mode = GENI_GPI_DMA; + geni_se_select_mode(se, GENI_GPI_DMA); + dev_dbg(mas->dev, "Using GPI DMA mode for SPI\n"); + } else if (ret == -EPROBE_DEFER) { + goto out_pm; + } else { + fifo_disable = readl(se->base + GENI_IF_DISABLE_RO) & FIFO_IF_DISABLE; + if (fifo_disable) + dev_warn(mas->dev, "FIFO mode disabled, but couldn't get GPI DMA, fall back to FIFO mode\n"); + else + dev_dbg(mas->dev, "Using FIFO mode for SPI\n"); - case 0: mas->cur_xfer_mode = GENI_SE_FIFO; geni_se_select_mode(se, GENI_SE_FIFO); /* setup_fifo_params assumes that these registers start with a zero value */ @@ -683,7 +678,6 @@ static int spi_geni_init(struct spi_geni_master *mas) writel(0, se->base + SE_SPI_CPOL); writel(0, se->base + SE_SPI_DEMUX_OUTPUT_INV); ret = 0; - break; } /* We never control CS manually */ -- 2.54.0