Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2815733pxj; Mon, 14 Jun 2021 07:48:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwnncqUMmGJ6cgq2eHiLZN7bsrh0VUEPzBE1tRsU4NtRf1/u3s5ZHU65bdMfwTMy3It4Xlo X-Received: by 2002:aa7:c647:: with SMTP id z7mr17108032edr.224.1623682132895; Mon, 14 Jun 2021 07:48:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623682132; cv=none; d=google.com; s=arc-20160816; b=N1q4k1055DWxci5vK04EZTLRZ/w0fEMyX0KjmCS1fUJyHkw0NKLatVaXZQ1A2QD70+ h5zT4Ac5yiZCXuGkm71HiXFfDwEig0rU9oZguPfMJ5L2tFMxwYw8lizxPggOMM3x8rfh lpi9MaKo1VuVb5wPtgL1pmEf3WO5MzOVHusVrCyaq79LdhyKh5ognRuTfnbnXsBYKuQN /vPLW3gqjeyApZz2hJn+Ax0TZoZHvAnvYH28gMpah1bdJ9gqvFOL/mZOlakXsRle/Ep7 B3qMpUv9s49YjjLoQrNlrReKEEtkD7rJds8azv9uPRKH62oSrrDwjIHmiFftVQjDT6Ao t51w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:content-disposition:mime-version :message-id:subject:to:from:date; bh=pVTi+lzPvVaHtr9Gnp/Za6CBb9Ro0n9VjwyxfOPHv1c=; b=Kpwr8fMb8GO9Ad7mwSlDr0n+ZOd90m+F1bXsfPyYySkrmDyWV18VZurjXpOHZ8aabI vAI76lPDAlFALAjno5iWnjej5BtXYCN5CpIlXBjzRlnHFQJy+zgWoJRncrtKAsYhf5QG 94plN032043unkd3vDvUBpyLr2pMumZqbGa/jm9Gyt08uGmGMTE3KPM9gdH29RKJyxqh ItqNQllPbDYaY9uzhoFC25KjeuRC4/OGxFcPIQHDuBdoD046cgUjNMIBrxusyCz+DJch EwyaU3jrW3he2mWkFHUmfNiy3sVG9fl9Ux1cQN3FcHOF5vAN8+nI+8TGx4c0Kv/mUguk l7Tw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c6si12712893edf.406.2021.06.14.07.48.30; Mon, 14 Jun 2021 07:48:52 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232919AbhFNOrS (ORCPT + 99 others); Mon, 14 Jun 2021 10:47:18 -0400 Received: from tux.runtux.com ([176.9.82.136]:41456 "EHLO tux.runtux.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232798AbhFNOrR (ORCPT ); Mon, 14 Jun 2021 10:47:17 -0400 Received: from localhost (localhost [127.0.0.1]) by tux.runtux.com (Postfix) with ESMTP id 774556F033; Mon, 14 Jun 2021 16:45:11 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at tux.runtux.com Received: from tux.runtux.com ([127.0.0.1]) by localhost (tux2.runtux.com [127.0.0.1]) (amavisd-new, port 10026) with LMTP id YZTLetKhIJS7; Mon, 14 Jun 2021 16:45:10 +0200 (CEST) Received: from bee.priv.zoo (62-99-217-90.static.upcbusiness.at [62.99.217.90]) (Authenticated sender: postmaster@runtux.com) by tux.runtux.com (Postfix) with ESMTPSA id 1454A6EF74; Mon, 14 Jun 2021 16:45:07 +0200 (CEST) Received: by bee.priv.zoo (Postfix, from userid 1002) id 7B97346E; Mon, 14 Jun 2021 16:45:07 +0200 (CEST) Date: Mon, 14 Jun 2021 16:45:07 +0200 From: Ralf Schlatterbeck To: Mark Brown , Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Mirko Vogt Subject: [PATCH v2 1/1] spi: spi-sun6i: Fix chipselect/clock bug Message-ID: <20210614144507.y3udezjfbko7eavv@runtux.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-ray: beware User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mirko Vogt The current sun6i SPI implementation initializes the transfer too early, resulting in SCK going high before the transfer. When using an additional (gpio) chipselect with sun6i, the chipselect is asserted at a time when clock is high, making the SPI transfer fail. This is due to SUN6I_GBL_CTL_BUS_ENABLE being written into SUN6I_GBL_CTL_REG at an early stage. Moving that to the transfer function, hence, right before the transfer starts, mitigates that problem. Fixes: 3558fe900e8af (spi: sunxi: Add Allwinner A31 SPI controller driver) Signed-off-by: Mirko Vogt Signed-off-by: Ralf Schlatterbeck --- For oscilloscope screenshots with/without the patch, see my blog post https://blog.runtux.com/posts/2019/04/18/ or the discussion in the armbian forum at https://forum.armbian.com/topic/4330-spi-gpio-chip-select-support/ (my logo there is a penguin). As far as we can tell the driver never worked with gpio chipselects. History: Updated patch with suggested readability-improvements by Andre Przywara drivers/spi/spi-sun6i.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c index cc8401980125..23ad052528db 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -379,6 +379,10 @@ static int sun6i_spi_transfer_one(struct spi_master *master, } sun6i_spi_write(sspi, SUN6I_CLK_CTL_REG, reg); + /* Finally enable the bus - doing so before might raise SCK to HIGH */ + reg = sun6i_spi_read(sspi, SUN6I_GBL_CTL_REG); + reg |= SUN6I_GBL_CTL_BUS_ENABLE; + sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, reg); /* Setup the transfer now... */ if (sspi->tx_buf) @@ -504,7 +508,7 @@ static int sun6i_spi_runtime_resume(struct device *dev) } sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, - SUN6I_GBL_CTL_BUS_ENABLE | SUN6I_GBL_CTL_MASTER | SUN6I_GBL_CTL_TP); + SUN6I_GBL_CTL_MASTER | SUN6I_GBL_CTL_TP); return 0; -- 2.20.1