Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp4103770pxa; Mon, 10 Aug 2020 00:14:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0hglt7IcJDlqlSwO/AoHl9DN5Hx63tqT9pU8q5DIfwkXZNeSPw36rcFer6cFiqLOzNDdb X-Received: by 2002:a17:906:f1da:: with SMTP id gx26mr20662767ejb.129.1597043644163; Mon, 10 Aug 2020 00:14:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597043644; cv=none; d=google.com; s=arc-20160816; b=iVSNymZpxjJ97p/L473Wo+sjzr61aEHZNO69HXBVglpcIW/ZLp0Ua4Yb3DzneCfaPL UIobZMT4nLnasRHFve6VszWdydEbeNX0bvtLPB3Dy3Ti+/3TWxfFk7z34jmqcnBvlS8t qy5QKKZQrdK92yrA6oCA76f3K5nJhbyxyz5H+X8fhpReoWD8G8kX1qV9yvoLl8VP28Ul ibB3W8Rn4NJmLPd417O7PdApGI533zh19WuRAMHnOLHyQcQmhZAIybZU7mHFhGRU+Ddz DFJAIfiCkKw6LLoev50W4OvTAq7gbhHzjDDO8EJqOBV6RSTdE75cRhZC25oUa4hkClvc yoZQ== 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=8q+d1ArUkG5jm0pSam8JI1Vha8Yw/HRnOaY9ga0COi8=; b=UHRJCtAWYkvckVvOuGrTObTcCcOAc35toN3+wNGGU6kdImvKVdTzZNXPGHnAR+OuuR Tgy2OO2EpDJJG/mK6sRXrSiJTobuQL26uiA1sFxTG20UMyc/+HIfikefInyfmibXIZS9 +b8xOTctAMTmG3ZZdm3cKzk2PaI06s6V+iKA2hKyVWqW60KqbmM8zScNE6/AMXGCHNgl +lRxZ/7D2cnrPDTgfLAQ+8CwP7fihuxPm5JOW/7pLPfX25vXM8fnSFQeRohYHBhctRhw 4m8oF0T58U9FpYIjOptZ0lrZNJyp9z3yh1A+WvtBX9bUoj2vNddJk9c7aXZ/3RPMJtIg ONGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=CNAHBb92; 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 d23si9875055edv.224.2020.08.10.00.13.41; Mon, 10 Aug 2020 00:14:04 -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=CNAHBb92; 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 S1726390AbgHJHNJ (ORCPT + 99 others); Mon, 10 Aug 2020 03:13:09 -0400 Received: from mx07-00178001.pphosted.com ([185.132.182.106]:23220 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726303AbgHJHNF (ORCPT ); Mon, 10 Aug 2020 03:13:05 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 07A71xIP026941; Mon, 10 Aug 2020 09:12:52 +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=8q+d1ArUkG5jm0pSam8JI1Vha8Yw/HRnOaY9ga0COi8=; b=CNAHBb92M3DW9sVlvf91k6LIIWc8SlTJnGcA8X6/UeGkEXyUjc+JTI0lM3zm7iKlLAm3 Ay5Y/2MODmMYOMd9654BiTyBEpd15xa6HDom2Du//9l9Ep/639ImiQFhk/3vb//jGvsa uedLVYRguR0VUAB/ee5cYEkU1VcxjR0uTOHVRh4vZZukz6HlxHt5vXmkXwzuT0GQAIuL xCLYpjIjo1cTYiS4XHsPUwPLq5XWRJDE23NnAL68aBHtOJPaSt1gCVsjWKaw0uYqF92F uM9Z+xZJb0RONWv39vPvDkvqUJga1mplPAgqqB9Py7XbJFkyGhErtxuAM4dljo+YacWS Vg== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 32smf968j3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Aug 2020 09:12:52 +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 3E812100038; Mon, 10 Aug 2020 09:12:51 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node2.st.com [10.75.127.8]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 2D19B2AD9EC; Mon, 10 Aug 2020 09:12:51 +0200 (CEST) Received: from localhost (10.75.127.46) by SFHDAG3NODE2.st.com (10.75.127.8) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 10 Aug 2020 09:12:50 +0200 From: Alain Volmat To: , CC: , , , , , , , Subject: [PATCH v2 2/5] spi: stm32: fix fifo threshold level in case of short transfer Date: Mon, 10 Aug 2020 09:12:35 +0200 Message-ID: <1597043558-29668-3-git-send-email-alain.volmat@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1597043558-29668-1-git-send-email-alain.volmat@st.com> References: <1597043558-29668-1-git-send-email-alain.volmat@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.46] X-ClientProxiedBy: SFHDAG1NODE3.st.com (10.75.127.3) 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-10_02:2020-08-06,2020-08-10 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 --- v2: fix conditional statement drivers/spi/spi-stm32.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index 814a3ec3b8ad..e5450233f3f8 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -467,20 +467,27 @@ 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 */ + if (half_fifo > xfer_len) + packet = xfer_len; + else + packet = 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 +495,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 +1403,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 +1598,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 +1647,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