Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp4155810pxv; Mon, 19 Jul 2021 18:42:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyY+eoZqpVSEu5l3kCJRCUVAO+oN4cj+zqP+DhJgJc/+yRHO/Cn9EEILu4SXsTpfAhQOkOh X-Received: by 2002:a92:d9c6:: with SMTP id n6mr19197555ilq.142.1626745364576; Mon, 19 Jul 2021 18:42:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626745364; cv=none; d=google.com; s=arc-20160816; b=EjE/BgOPZxqivG6t8s01geqqDfperuOW9YvKU2xu1a3JkxynF8vwWkjeNa92zGqAQC XcFbBQfRlGDTOTXdUqZ9M/HUlArtouwgrYelqMwQelCGOgD8LsAe46zEAiG7b+KgHl1v 6tHsR0NUZlScr41V/XgSii+L6W7bsCNVEzjXX21SnOr5K/cOIEzwD4xlDzjaa81UJEZl IqI4nd+e96AJQmchhPgpy1XsDhsv9HoNsloZFnul/gpgJEHOaOqqUAE4RxAz2ZOahg3H j8YMtrv72zGMqTnCBbDsS7bqSyybUVo8imEpnHMR7Sg2hD3W922OHqHoIO1HxA5ryocP Mkjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=WGd/EXsC32YQ03W9f/4RmWtYjNngKFM0MX+RhZRQ7mk=; b=YzJI54QjlobSRDS0S5wyfV7t6/Ksz8ep0qmBVW4lNqjN7tKl/MPkOeAtneUKYSAwvW 00KzkmRep9dvt9h00f8KVOSe26x9DTjyxYd19taAXPFe2jNMj7E3t7wH65Sd7lzFkHpa /4AVO+MyUf0J2t+FjXDeFiMrfocLUoWLOdX78yOQhzMeZ2a03msy6GNzHT4C+g5AlUoN oEMefucjTRLcBvK0SZ2ZRkIjQr2uX4uOGsjmtgNQ8LLGOtwcnLUMcQj44PfZbFS0Fo9Q Xxt/mVvG8PAz39Tti3tKha+HAWOBOYEpNJqJwuyq4eI7i/ot2SM8383EnQVlwu5h1q6F yqjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=EqUdBX5Z; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p16si12552233jan.14.2021.07.19.18.42.33; Mon, 19 Jul 2021 18:42:44 -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=@linuxfoundation.org header.s=korg header.b=EqUdBX5Z; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245043AbhGSO5k (ORCPT + 99 others); Mon, 19 Jul 2021 10:57:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:56024 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242781AbhGSOih (ORCPT ); Mon, 19 Jul 2021 10:38:37 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B12C961263; Mon, 19 Jul 2021 15:17:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626707878; bh=Tsbza4aPmHAn+cZbhrOMidKuZfIB/13F/TXDGOY30Ec=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EqUdBX5ZhoKjlCZbJP6kDV8ZVRm0DEKZ2qmOZU13HTz33ONj6VtoMbRhoyhDKk0Mm mQCV+s8nxdlHtKBRCCPgD7LYvlACKZMjPMcE4CjTY+Z32JGZMPx4B0VurhjzYqJHUB 4fYIcAqXQeHaQVoq5FQeJjZ9co5Axg3bgVubxHCI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mirko Vogt , Ralf Schlatterbeck , Mark Brown , Sasha Levin Subject: [PATCH 4.14 092/315] spi: spi-sun6i: Fix chipselect/clock bug Date: Mon, 19 Jul 2021 16:49:41 +0200 Message-Id: <20210719144945.905243633@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.861561397@linuxfoundation.org> References: <20210719144942.861561397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mirko Vogt [ Upstream commit 0d7993b234c9fad8cb6bec6adfaa74694ba85ecb ] 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 Link: https://lore.kernel.org/r/20210614144507.y3udezjfbko7eavv@runtux.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- 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 21a22d42818c..ef62366899ad 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -301,6 +301,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) @@ -409,7 +413,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.30.2