Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp267189pxa; Wed, 5 Aug 2020 00:06:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzOyJphsavkj+zyfNZoNNOLbqLZVpSc5zF0tQBl5tesUlKrnLi5DUownduZ21MK/xURAiK2 X-Received: by 2002:a50:fb94:: with SMTP id e20mr1508378edq.103.1596611180512; Wed, 05 Aug 2020 00:06:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596611180; cv=none; d=google.com; s=arc-20160816; b=KJ5r9nIjwjlpAkj0nqSacPJ2bx8b+buzKc30KLxBnPsBmL2JycNT18mjXOYteJac4R DGVvI08gQ98/I3ir9KJ7DQw8zWGi0oWscmBIX3g9zOzh/XHjZOpsbUWpulLWxNXAnjB/ vt77uZOMhB/DgzDoA2B9BH4Wiv+IRoqUYgC8yy9xunGjVI/kUPh7/JkD2pqcLHu672VE W6EYmLCVjvg7X1/hyxMiItBbAJuMH5OXybYFOLIP+zCRJYQgj6o5xbfx1uz5+MCtCa78 syDtt7i+jzVSIPd6aPtR7VVLEuPpqL1O3BNmMV4rZGy9Woit9P+Ds0uoUh2iWyUwgY1L Oz2w== 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=Dkcz5/MQdyfXGYbowr7lL2X1in1BAehYDuwQWtvD7wU=; b=Us7rwGgtUWUxB6v1mTLsFq4UNncMf+GOqoujYnH+wgnTjWYCf4QLlY21Q0sTZK4XD/ sP2uQEK60MboJfwPt46HaGSRKS8kHNK4fQiGD7YjDUPoHbkZ2XvF4a4NXkYj8K7rKgT+ 49dfRQmiV44oS72UELkHRMMSdTk5SS7Lj2shvYai0NRFv5NOYGc8Avy/g494M1SKBzVx OMAhTgQXVmq1+PZID0XlgKFGezuzdw+9UMEC3CWG4YrAkuupqtPcMuXo/LjI3z6oMsyf EUyYgy1CfwK19kgWAGMjas+DOlkS5i49hVPlfr3qx11MtExQmI8w+vdc4v6qvqYqzyx7 LcTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=pbFMirid; 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 k8si756879ejb.67.2020.08.05.00.05.58; Wed, 05 Aug 2020 00:06:20 -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=pbFMirid; 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 S1728378AbgHEHEg (ORCPT + 99 others); Wed, 5 Aug 2020 03:04:36 -0400 Received: from mx07-00178001.pphosted.com ([185.132.182.106]:27816 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728129AbgHEHEb (ORCPT ); Wed, 5 Aug 2020 03:04:31 -0400 Received: from pps.filterd (m0046037.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 07572gFm017714; Wed, 5 Aug 2020 09:04:18 +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=Dkcz5/MQdyfXGYbowr7lL2X1in1BAehYDuwQWtvD7wU=; b=pbFMirid+URvOdkOwSaBumiwA3NFY6yA3iXEKUbPZfhyzVGhheZZyPNBBaJ2MaCpJ4iS yzv77DJE/KRiWHgmnPUMjet1xn+scdlV4Fg7fqcysldtuIpfdVS3NLYyK8t5wrHq50lF OqU5VslxkGJ5QkIlGikNOHLdPgaWZjaE/E03rsTckaOoHdUy+yu1DaVtKQQP+8wbpehW +mGPP3cBXF0JtqnYmpekPLAmkoZPsE7hVf3ubJBMPzlVulqX2cYa+XRGe5cd9+l7Zz4j N+NOHkqkfHEvd2oFUhbKbYXD59bJ0Z+3Bxenctn5Zv8Mj5DulFHlX9CNR4UBX2JhatWZ WA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 32n6sb6qx9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2020 09:04:18 +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 2FE28100034; Wed, 5 Aug 2020 09:04:18 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node2.st.com [10.75.127.8]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 22FFB2A4D8E; Wed, 5 Aug 2020 09:04:18 +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; Wed, 5 Aug 2020 09:04:17 +0200 From: Alain Volmat To: , CC: , , , , , , , Subject: [PATCH 11/18] spi: stm32: fix fifo threshold level in case of short transfer Date: Wed, 5 Aug 2020 09:02:06 +0200 Message-ID: <1596610933-32599-12-git-send-email-alain.volmat@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1596610933-32599-1-git-send-email-alain.volmat@st.com> References: <1596610933-32599-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: SFHDAG8NODE3.st.com (10.75.127.24) 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-05_04:2020-08-03,2020-08-05 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 7e3894455331..0eda9903e11e 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -459,20 +459,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) @@ -480,6 +484,9 @@ static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi) else fthlv -= (fthlv % 4); /* multiple of 4 */ + if (!fthlv) + fthlv = 1; + return fthlv; } @@ -1385,7 +1392,7 @@ static void stm32h7_spi_set_bpw(struct stm32_spi *spi) cfg1_clrb |= STM32H7_SPI_CFG1_DSIZE; cfg1_setb |= FIELD_PREP(STM32H7_SPI_CFG1_DSIZE, bpw); - 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; @@ -1571,6 +1578,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); @@ -1618,8 +1627,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