Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2227698pxa; Fri, 7 Aug 2020 06:26:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAcZdKCzMw9rDctmNRRkl4vTIofP/bLzdWfS3bXVvZ3BPAYja0WGvngjJRv5xJgjCT2oTM X-Received: by 2002:a50:93c5:: with SMTP id o63mr8648039eda.31.1596806814111; Fri, 07 Aug 2020 06:26:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596806814; cv=none; d=google.com; s=arc-20160816; b=PrUo/N147q2YE4IkBgpJb8+BdeSkNnLOyqhS2yf9U8JjkrueG30HaCQn58Jw5vWkmb o6FVbaH2ujQFKTA6BdJWRgeuf+Fzah/lC91Sitdhm7KqC3fgS8Hw4OI+oqePZ6hAtq4P gvT8FpHNqF27WclwyfaO2DErJRbdolJuCzriQePkL+46dLG+P6tZFaGd84wjZAaPwtPf MwDQM/7JSxqYyvZl4V10Dx6pUaPzFDprMBd863r0meqCSEvr5DpPylm5esV0gAR689SS BrVsi4L2N5pnQFgG79KNYAqT2on8v+0bsq1EcXLbX5l1O/ImLkV7nhLgBHs7pHMvvr4H Yzwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=2ddb2mwUeWLvuEMOm1rO5q8g0YXV5yb4PrqDntPgws8=; b=gZjDes3YYZbG3zi1y1r22rRTj9bEwNb4uj4/4xlmbwNUO4qCxAFdXc8whNV8KLf4/V m4ZWRlLiJl9ojJCXzrUua3G6J39cMOdOcZndindVynKutx6H1Aw93KEFXblqmJ7iHvX0 FcErzcP0FFYmx3GSofS9Eb6xNmtOmnj7LERrPE44jZa0uiJLWZ76aqQkrM50TI5hZseK J0RdH0GL6+KQD7KeT/MJ3rjKYd1kfQo2Xf/Ti4ZXrMmOQS7jqK1/osgLDxelxF44oQiI g0I533xMvPkdwxd1HBEMzRfrf0w6/i20eEGu0nPdtOyosmWCH/ZF/RIoE1wQySyKVKYw TMSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=wSK0giKK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f27si5623261ejt.13.2020.08.07.06.26.31; Fri, 07 Aug 2020 06:26:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=wSK0giKK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726233AbgHGNYY (ORCPT + 99 others); Fri, 7 Aug 2020 09:24:24 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:6468 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725970AbgHGNXq (ORCPT ); Fri, 7 Aug 2020 09:23:46 -0400 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 077DMljM022006; Fri, 7 Aug 2020 15:23:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=2ddb2mwUeWLvuEMOm1rO5q8g0YXV5yb4PrqDntPgws8=; b=wSK0giKKj6xlFGAclxdrrDE+JxsdVyhUHQ2vL9hB8ylXTeznvosdapV45DmfI64hSPXs JpeAuG4OsEwp2oVevGKjl+gKzp4hWbnjdQwwUBNh+HfofwjelzTJZBHk+5HP8H1Lweix 24WMYoiKfQVLE59XuZrsF48GtsU20WAsTm4M0HH8mhLW4LTEAO86FtRdykEuFPZNbL86 8rz/kVBUqwyAWkQWXaxm80IMG3EOF2aWWIpnOIqnxX6Zal1AFcMCOj5Ln5V/hTSjh+TL jqYMLwPl4Ro9B6CL++OvDrx3BukRQuQz7i5tbnUIeh+C8tKjQFyTBydza+rLghNuAIyz IQ== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 32n6j02e9m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Aug 2020 15:23:31 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 7B50B100038; Fri, 7 Aug 2020 15:23:30 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node2.st.com [10.75.127.8]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 70C9B2B8A02; Fri, 7 Aug 2020 15:23:30 +0200 (CEST) Received: from localhost (10.75.127.50) by SFHDAG3NODE2.st.com (10.75.127.8) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 7 Aug 2020 15:23:30 +0200 From: Alain Volmat To: , CC: , , , , , , , Subject: [PATCH 2/5] spi: stm32: fix fifo threshold level in case of short transfer Date: Fri, 7 Aug 2020 15:21:22 +0200 Message-ID: <1596806485-3810-3-git-send-email-alain.volmat@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1596806485-3810-1-git-send-email-alain.volmat@st.com> References: <1596806485-3810-1-git-send-email-alain.volmat@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.50] X-ClientProxiedBy: SFHDAG1NODE2.st.com (10.75.127.2) To SFHDAG3NODE2.st.com (10.75.127.8) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-08-07_09:2020-08-06,2020-08-07 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Amelie Delaunay When transfer is shorter than half of the fifo, set the data packet size up to transfer size instead of up to half of the fifo. Check also that threshold is set at least to 1 data frame. Signed-off-by: Amelie Delaunay Signed-off-by: Alain Volmat --- drivers/spi/spi-stm32.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index 814a3ec3b8ad..005bc16bdf2a 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -467,20 +467,24 @@ static int stm32_spi_prepare_mbr(struct stm32_spi *spi, u32 speed_hz, /** * stm32h7_spi_prepare_fthlv - Determine FIFO threshold level * @spi: pointer to the spi controller data structure + * @xfer_len: length of the message to be transferred */ -static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi) +static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi, u32 xfer_len) { - u32 fthlv, half_fifo; + u32 fthlv, half_fifo, packet; /* data packet should not exceed 1/2 of fifo space */ half_fifo = (spi->fifo_size / 2); + /* data_packet should not exceed transfer length */ + packet = (half_fifo > xfer_len) ? xfer_len : half_fifo; + if (spi->cur_bpw <= 8) - fthlv = half_fifo; + fthlv = packet; else if (spi->cur_bpw <= 16) - fthlv = half_fifo / 2; + fthlv = packet / 2; else - fthlv = half_fifo / 4; + fthlv = packet / 4; /* align packet size with data registers access */ if (spi->cur_bpw > 8) @@ -488,6 +492,9 @@ static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi) else fthlv -= (fthlv % 4); /* multiple of 4 */ + if (!fthlv) + fthlv = 1; + return fthlv; } @@ -1393,7 +1400,7 @@ static void stm32h7_spi_set_bpw(struct stm32_spi *spi) cfg1_setb |= (bpw << STM32H7_SPI_CFG1_DSIZE_SHIFT) & STM32H7_SPI_CFG1_DSIZE; - spi->cur_fthlv = stm32h7_spi_prepare_fthlv(spi); + spi->cur_fthlv = stm32h7_spi_prepare_fthlv(spi, spi->cur_xferlen); fthlv = spi->cur_fthlv - 1; cfg1_clrb |= STM32H7_SPI_CFG1_FTHLV; @@ -1588,6 +1595,8 @@ static int stm32_spi_transfer_one_setup(struct stm32_spi *spi, spin_lock_irqsave(&spi->lock, flags); + spi->cur_xferlen = transfer->len; + if (spi->cur_bpw != transfer->bits_per_word) { spi->cur_bpw = transfer->bits_per_word; spi->cfg->set_bpw(spi); @@ -1635,8 +1644,6 @@ static int stm32_spi_transfer_one_setup(struct stm32_spi *spi, goto out; } - spi->cur_xferlen = transfer->len; - dev_dbg(spi->dev, "transfer communication mode set to %d\n", spi->cur_comm); dev_dbg(spi->dev, -- 2.7.4