Received: by 2002:ab2:6d45:0:b0:1fb:d597:ff75 with SMTP id d5csp272091lqr; Wed, 5 Jun 2024 05:53:32 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXzPmFeGxIkIgxOS8nywSfy23+TzgvaCAxPh5J6NJ2rwURQEdW428i3ENp5tsOTSXxQOZbb89Xo6sZitJaQjlx/x8RXC1R6u7wIO3SJyQ== X-Google-Smtp-Source: AGHT+IHkM1BN0np+AXThOlE/1u85W8eTk270vdX2Nmo09ifNc/uV1wTrhX0QNh02kuMcCoGzSTGY X-Received: by 2002:a17:906:3511:b0:a63:cb4e:9a10 with SMTP id a640c23a62f3a-a69a02688afmr146228766b.77.1717592012574; Wed, 05 Jun 2024 05:53:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717592012; cv=pass; d=google.com; s=arc-20160816; b=MLDAQ4E7OZTMflEiDnQ/7jmZxIMG/V8TzmMai8FIckiy6349Gu/LrOaK9eRcsaVBf6 RFVd8KRXhc9brSYW2mfo+toTjbklm6XyoaDdqTsERRwjo+iR+SK2DqBqygP+g61ZXfvj lN9bw1GqNpUQvo8h2o9NHMW9scHBljeMzrj/WdkPPYOs12/tC5xriSWe1mauTau4WpK0 COUXxhWoNjzTzT7DFXTIbd7wgmJZVMX9n8E5aWuNKIgwdoDRYWCCm0nPa4S77w7Ij97P K77XOrBWHP7aAg6bh1OGuMUrcNLUrGTpowvjWWSEn2a4zbQfCtYKNQj1cLs2AkdmEP75 CpMw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=pHnad96vqoAUszpqKKaOxxTRhvRunHP9RdGlT7BtrYw=; fh=srJwOi1zWvrMgPs3L80QV/aWjEWmvND1C6LR5ho25jI=; b=Dbv8q5ncdGN2Y7CxVK9MZyNAEiyO1MSCmbLzR7g3AWYrLc/JmS9jCaho/bgXekvlh4 qaDSoQLog5AW3wTjuBiOCsfBDrQfKRq42+d8Ocrg/onwmxZ/OKrSsQu2GjKmbya55Alu 4VaE1BavnKsx8q8vnZVvDKOaE8DLqbs3de3tCbRSqo5iFpjMz3BAn5hCxufdmExd8GUu CF0Jgna8SYJuYnCyOx/yzPoUY0IrE9C5MWXg9ln37EyCBxbM064jO0QRoZBjGlb89vzU Ihd2NdYniwKf8sJRJL8rofaG1q7biy8VTt2hrJ7pSMe4zZrteBY6294LJotK8WFIYmsN t5DQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=biwUV3T1; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-202525-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-202525-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id a640c23a62f3a-a67ea8869c4si609573866b.580.2024.06.05.05.53.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Jun 2024 05:53:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-202525-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=biwUV3T1; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-202525-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-202525-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org 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 am.mirrors.kernel.org (Postfix) with ESMTPS id 7B5A21F2876A for ; Wed, 5 Jun 2024 12:47:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E0CF11CD462; Wed, 5 Jun 2024 12:05:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="biwUV3T1" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 087BF1CD448; Wed, 5 Jun 2024 12:05:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717589115; cv=none; b=NsGhoFj3rwN4cnNnP+3Q/uMEbaHU0lWgePnGwhICfR+v8j0jhKdCDIWZJttRpPWI+ccQ0HOo7BtQrSTJou1/arGaGr27PQt8nOWijTK1p3S8LhxHVUAiF5/33wQAMjSyCY0Nm7u8PxRfCv2iN6zBtZZOKBSHxF0tUISgvpF8K+Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717589115; c=relaxed/simple; bh=Pvlv1exqFURZ7yFfeNaFPWfN/fe30G0y1zsVtOQXolE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hu8Lk8Ab7wEMd3lp8zljqR0UMvBw5uunp9KFUcHOTtGTNrc6/rUnTDIOJDFoEVaxxHD/y/kMC5sMn/vwUGSbXcIrx/Dl3W7zx6pKpYIP0rWtxNcC9LaU5NAHwJSIyGrflkOUcXT0Y81EdbdADqev1rx1LldJQNqZ1Fpgm5rP60o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=biwUV3T1; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id F18D6C4AF08; Wed, 5 Jun 2024 12:05:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717589114; bh=Pvlv1exqFURZ7yFfeNaFPWfN/fe30G0y1zsVtOQXolE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=biwUV3T1yDnGnrlYwFzt+MQF0rPZjBVW75H5Wqtf/818QFiA88zwHDXBLX1wJNG8A Ps+azm5V3tAUGB92hoiTnssPpOrMeJuEmAQnx1BQMfjLfUp0yBoeXYFtR0kvfdcYXS PP+nweWme+eT4c7NB/USPRcL3wgDEJU2qcbSm2lmpV+UKLUyiRuyxR4kbSkO8dqhp3 C6zPzIXOBMdZvdbTJmSIp8MuJYwd2KekprUtd2nOXn9PabmqYybJ7ljgOm5Fe9b4hZ 1z0L2pWvGwOj5dt+UbA05m4VAOjhkQq5kYsw3tUOB2sZDkoIpdntp+vOGPpc7VOCU7 gwsroM0sFGkfg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Witold Sadowski , Mark Brown , Sasha Levin , linux-spi@vger.kernel.org Subject: [PATCH AUTOSEL 6.1 12/14] spi: cadence: Ensure data lines set to low during dummy-cycle period Date: Wed, 5 Jun 2024 08:04:45 -0400 Message-ID: <20240605120455.2967445-12-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240605120455.2967445-1-sashal@kernel.org> References: <20240605120455.2967445-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.1.92 Content-Transfer-Encoding: 8bit From: Witold Sadowski [ Upstream commit 4a69c1264ff41bc5bf7c03101ada0454fbf08868 ] During dummy-cycles xSPI will switch GPIO into Hi-Z mode. In that dummy period voltage on data lines will slowly drop, what can cause unintentional modebyte transmission. Value send to SPI memory chip will depend on last address, and clock frequency. To prevent unforeseen consequences of that behaviour, force send single modebyte(0x00). Modebyte will be send only if number of dummy-cycles is not equal to 0. Code must also reduce dummycycle byte count by one - as one byte is send as modebyte. Signed-off-by: Witold Sadowski Link: https://msgid.link/r/20240529074037.1345882-2-wsadowski@marvell.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/spi/spi-cadence-xspi.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c index d28b8bd5b70bc..b8bed8f39d2ae 100644 --- a/drivers/spi/spi-cadence-xspi.c +++ b/drivers/spi/spi-cadence-xspi.c @@ -146,6 +146,9 @@ #define CDNS_XSPI_STIG_DONE_FLAG BIT(0) #define CDNS_XSPI_TRD_STATUS 0x0104 +#define MODE_NO_OF_BYTES GENMASK(25, 24) +#define MODEBYTES_COUNT 1 + /* Helper macros for filling command registers */ #define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase) ( \ FIELD_PREP(CDNS_XSPI_CMD_INSTR_TYPE, (data_phase) ? \ @@ -158,9 +161,10 @@ FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR3, ((op)->addr.val >> 24) & 0xFF) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR4, ((op)->addr.val >> 32) & 0xFF)) -#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op) ( \ +#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, modebytes) ( \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_ADDR5, ((op)->addr.val >> 40) & 0xFF) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_CMD, (op)->cmd.opcode) | \ + FIELD_PREP(MODE_NO_OF_BYTES, modebytes) | \ FIELD_PREP(CDNS_XSPI_CMD_P1_R3_NUM_ADDR_BYTES, (op)->addr.nbytes)) #define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op, chipsel) ( \ @@ -174,12 +178,12 @@ #define CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op) \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R2_DCNT_L, (op)->data.nbytes & 0xFFFF) -#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op) ( \ +#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes) ( \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_DCNT_H, \ ((op)->data.nbytes >> 16) & 0xffff) | \ FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_NUM_OF_DUMMY, \ (op)->dummy.buswidth != 0 ? \ - (((op)->dummy.nbytes * 8) / (op)->dummy.buswidth) : \ + (((dummybytes) * 8) / (op)->dummy.buswidth) : \ 0)) #define CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op, chipsel) ( \ @@ -352,6 +356,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi, u32 cmd_regs[6]; u32 cmd_status; int ret; + int dummybytes = op->dummy.nbytes; ret = cdns_xspi_wait_for_controller_idle(cdns_xspi); if (ret < 0) @@ -366,7 +371,12 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi, memset(cmd_regs, 0, sizeof(cmd_regs)); cmd_regs[1] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase); cmd_regs[2] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_2(op); - cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op); + if (dummybytes != 0) { + cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 1); + dummybytes--; + } else { + cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 0); + } cmd_regs[4] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op, cdns_xspi->cur_cs); @@ -376,7 +386,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi, cmd_regs[0] = CDNS_XSPI_STIG_DONE_FLAG; cmd_regs[1] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_1(op); cmd_regs[2] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op); - cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op); + cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes); cmd_regs[4] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op, cdns_xspi->cur_cs); -- 2.43.0