From patchwork Fri Dec 2 09:48:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edmund Berenson X-Patchwork-Id: 28841 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp747857wrr; Fri, 2 Dec 2022 02:11:14 -0800 (PST) X-Google-Smtp-Source: AA0mqf7LnwVbRxxZ5U9WJqiXSw6XFeDg8yGGUC+zp4fh+/whCHJXp/5OU1nJN5GoNLM/a5vPZX4B X-Received: by 2002:a17:906:2810:b0:7b2:7b45:2bf6 with SMTP id r16-20020a170906281000b007b27b452bf6mr43623013ejc.467.1669975874277; Fri, 02 Dec 2022 02:11:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669975874; cv=none; d=google.com; s=arc-20160816; b=WtguCZgHaIjAXJEi5OPUxnt13SoMV9gUKmXq5HhrqkWrQEcFiQgYRBP3H1fg23Y+1+ FoDh/0TdDepr9swKqc5eBg2JQxXli5Dh1Q5StgNv3s5OEweAZpcXP4v3YPm+RbelNczw JUMvTf78ZEtjcBRe5rx76u0Nrme8yE5CtXOzRVRlwAA99dpE8nP0mn7cDtr+LZCVzxtb M6vYS3KT0mCglfC/cNo6pVrT0++YVnzu4OBMmTTY7/tUb4MJsSEKXvultT5RudCcH0kC jNc3QIctZCeL83LPrCcDKxAa3P++8a/Sg4ZYyvBUpgfWgHrqNhM1eH7CJYmTf/d0YaxZ i0jQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :message-id:date:subject:cc:from; bh=no0/j1uS8ky8ai40Jk+S87FnRVKqYBea51HAJ6XVcdU=; b=MWXuADWnne+nGixuW1iXnx5A4UCWvLn0wd5jXcqVeRCZDgblmywJNi/q4orxcW6Epq 33KWv07WbWEClci5QGO3uQQH7pToLuNPAQPVZbeF9X4pz7eB/TSiCGOX5NELji0Azqzv FyaIo5IScsmEQhMsAYq4xUM3NCmngZtmCdmmZ7xRpPd9bf8znAQvFEUAADa5SYVxYqa9 u6QCt2VwgTdmYJyZrOGM1QcmOJ4KZRkS+u37lnurkNc1PNvqe735nLEq2zvS8ZtGacXy qiBbc+IZbeHz79f3UQqMNR8Ovq76briuiKQnApoJJvKveawepwqfkzDcP73JsAOqw7Sn rs9A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i17-20020a50d751000000b00459c1e64776si5457482edj.412.2022.12.02.02.10.49; Fri, 02 Dec 2022 02:11:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232784AbiLBJtZ (ORCPT + 99 others); Fri, 2 Dec 2022 04:49:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231449AbiLBJtY (ORCPT ); Fri, 2 Dec 2022 04:49:24 -0500 Received: from mx1.emlix.com (mx1.emlix.com [136.243.223.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87E05C868A for ; Fri, 2 Dec 2022 01:49:22 -0800 (PST) Received: from mailer.emlix.com (p5098be52.dip0.t-ipconnect.de [80.152.190.82]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.emlix.com (Postfix) with ESMTPS id C25FD5FCDC; Fri, 2 Dec 2022 10:49:20 +0100 (CET) From: Edmund Berenson Cc: Edmund Berenson , Lukasz Zemla , Serge Semin , Mark Brown , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] spi: dw: select SS0 when gpio cs is used Date: Fri, 2 Dec 2022 10:48:59 +0100 Message-Id: <20221202094859.7869-1-edmund.berenson@emlix.com> X-Mailer: git-send-email 2.37.4 MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751096622496656450?= X-GMAIL-MSGID: =?utf-8?q?1751096622496656450?= SER register contains only 4-bit bit-field for enabling 4 SPI chip selects. If gpio cs are used the cs number may be >= 4. To ensure we do not write outside of the valid area, we choose SS0 in case of gpio cs to start spi transfer. Co-developed-by: Lukasz Zemla Signed-off-by: Lukasz Zemla Signed-off-by: Edmund Berenson --- drivers/spi/spi-dw-core.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 99edddf9958b..57c9e384d6d4 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -94,6 +94,10 @@ void dw_spi_set_cs(struct spi_device *spi, bool enable) { struct dw_spi *dws = spi_controller_get_devdata(spi->controller); bool cs_high = !!(spi->mode & SPI_CS_HIGH); + u8 enable_cs = 0; + + if (!spi->cs_gpiod) + enable_cs = spi->chip_select; /* * DW SPI controller demands any native CS being set in order to @@ -103,7 +107,7 @@ void dw_spi_set_cs(struct spi_device *spi, bool enable) * support active-high or active-low CS level. */ if (cs_high == enable) - dw_writel(dws, DW_SPI_SER, BIT(spi->chip_select)); + dw_writel(dws, DW_SPI_SER, BIT(enable_cs)); else dw_writel(dws, DW_SPI_SER, 0); } From patchwork Fri Dec 2 09:49:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edmund Berenson X-Patchwork-Id: 28843 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp748150wrr; Fri, 2 Dec 2022 02:11:59 -0800 (PST) X-Google-Smtp-Source: AA0mqf6AR/r/W1dCd5FgonVHA+2jHnaTJSZsyNgMZupOjpisvGiuAOOY7S1BxN0ZOL9W/t8xA5Ta X-Received: by 2002:aa7:dbd8:0:b0:467:60fa:b629 with SMTP id v24-20020aa7dbd8000000b0046760fab629mr62175568edt.281.1669975919405; Fri, 02 Dec 2022 02:11:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669975919; cv=none; d=google.com; s=arc-20160816; b=e4hV+/MXbydiT5PRg8bM13VH2nDrOljzDHI5V+d3/EpUR82qyIJV6mQo0G1GX9Tpw7 3Yi+4R7JyJssJe9DUKqUfOV9EZaZiK6yTx7HpjErPjCUR2bgMEvUR/JICtklUwTtFk75 pJItwELuier7Sy4xDLryk3HYG4JU8WdBqGnFfCJpvDa+m0smDi+JoILYBoX+TQKz1bXC myFKrncFzroXAmZ8X/ogjGpMEiWVaNAK/9/QJgVUB9gyso/Caprnj76RqD57C0Nrh6VA o80pNOBP89cKMZPhuF7wJFcDNbU4rDIeZtK2ow9slJSgvbtb6SjsFRGW9S6XDrVq5pop VlRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :message-id:date:subject:cc:from; bh=koYeDer2OKQB/YOtbGJMawW5/gIPGccMAlegO3peTzs=; b=TrVpwSDjuM+6LRkYDqC8xIO1NkE+VmSo2aNfoQZ8JrBkWLSvs2JedYh+ykWJBxkGLm ogWZH1D3Nh0wvEmz6MrmeGCgfT4PomekQgv5nyzuW54oOmO3SMM5ESt/8phUE7wEhfWs 8IpBE6ajGRBr/zUR0foouMPm6/w0YbACFZYxJkxmd9eWLW8bcgiPf2/BChS7GJOoBcNE c1vmKB7CeMdXi3XMJU+P4w3fgqE6J9yYNVwC2MIcVbXXNQ7nT+hkLGsjk41tsPbRaSrq hIASRkppOJ7mneoGFTlhwpUAEGXvJhoulTcN5tIJ/o21Yd2ih1hIhuhhlQe7wNk9Ubxw /vlQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o9-20020a170906974900b00791994dfb9esi6541211ejy.491.2022.12.02.02.11.36; Fri, 02 Dec 2022 02:11:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233059AbiLBJti (ORCPT + 99 others); Fri, 2 Dec 2022 04:49:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232272AbiLBJta (ORCPT ); Fri, 2 Dec 2022 04:49:30 -0500 Received: from mx1.emlix.com (mx1.emlix.com [136.243.223.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5618BC9376 for ; Fri, 2 Dec 2022 01:49:29 -0800 (PST) Received: from mailer.emlix.com (p5098be52.dip0.t-ipconnect.de [80.152.190.82]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.emlix.com (Postfix) with ESMTPS id 0E82C5FEEB; Fri, 2 Dec 2022 10:49:28 +0100 (CET) From: Edmund Berenson Cc: Edmund Berenson , Lukasz Zemla , Mark Brown , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] spi: execute set_cs function before gpio cs is activated Date: Fri, 2 Dec 2022 10:49:26 +0100 Message-Id: <20221202094926.9113-1-edmund.berenson@emlix.com> X-Mailer: git-send-email 2.37.4 MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751096669361443742?= X-GMAIL-MSGID: =?utf-8?q?1751096669361443742?= In some cases it is necessary to adjust the spi controller configuration before gpio cs is set. For example if spi devices requiring different cpol are used from the same controller the adjustment to cpol has to be made before gpio is activated. To achieve this set_cs should be executed before gpio cs and necessary adjustments can be made inside of controller driver. Suggested-by: Lukasz Zemla Signed-off-by: Edmund Berenson --- drivers/spi/spi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 5f9aedd1f0b6..bf2a67184969 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -976,6 +976,11 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force) enable = !enable; if (spi->cs_gpiod) { + /* Some SPI masters need both GPIO CS & slave_select */ + if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && + spi->controller->set_cs) + spi->controller->set_cs(spi, !enable); + if (!(spi->mode & SPI_NO_CS)) { /* * Historically ACPI has no means of the GPIO polarity and @@ -993,10 +998,6 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force) /* Polarity handled by GPIO library */ gpiod_set_value_cansleep(spi->cs_gpiod, activate); } - /* Some SPI masters need both GPIO CS & slave_select */ - if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && - spi->controller->set_cs) - spi->controller->set_cs(spi, !enable); } else if (spi->controller->set_cs) { spi->controller->set_cs(spi, !enable); } From patchwork Fri Dec 2 09:49:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edmund Berenson X-Patchwork-Id: 28834 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp742994wrr; Fri, 2 Dec 2022 01:59:11 -0800 (PST) X-Google-Smtp-Source: AA0mqf6skORiScMmg+dJHbaGSVM5TuRvDqGOfg1EuKjcDxnPKx9OyXb6VaDNFdBrXmxWeZQeLTJJ X-Received: by 2002:a17:906:52c8:b0:7ad:ba1e:1bac with SMTP id w8-20020a17090652c800b007adba1e1bacmr59723386ejn.528.1669975151482; Fri, 02 Dec 2022 01:59:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669975151; cv=none; d=google.com; s=arc-20160816; b=oGlh4gtiILcAq/0hlA2TWN3XSWHs+oD7WMKjHFK9h/a5xXCsyZ9JCVb7nFf68OQe6Z hNBKylFrCFg59/vEW4LKLBaY2QpwDa8999cRfSUyb++Vcc4Sip5/jwNiY5WRo1d9yGnX BSyFVZGfNZkS7Y/HLPjPlajDj2kVOB77vCAQXdaq3ya/pIr0a19kBLAMRynHOhtkC/kF M8q0rkkGJ6tO9LF2pdvp8hGH/wzAYcq2B+BKKtf4TsEssCRspzyj1ruWQD45+qE08ccu 3ZOCij2Ro6NGtACV4XF/SYlYMpPwpFAHqvIPiKdMeM2VqZUKTnWIpDV27l/s/fo0ZCoO zLCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :message-id:date:subject:cc:from; bh=im2rRR5PJvk82DFIGFS4nynO0MOwr166wWWAaXSEtaA=; b=nPEvqA8Aduz+xNOEt7HuXFV/ovQP/O6fsoukf9PVZ2A+2bs1g6pjT0G06xxwNTk7+Z L7HXeba9HD7P54lCSkwryFlKW7qzebslIAGSY9MAmO0qjEooJQQhgJtEA54YU6VdJZcF VjFHpGAQXeWN60JIIQZVXttAxg99PnY1WjOeSZQ7cQcn3VofOseKR80vrfZj6TAGLJwg Pca0XOvY3k8VAoIfdG8Pp3ek4rvR4aP59IcrllU5tXk30uj+6SuUYS2ikupSr6U2W6so 7jk7pZAO/IPB6o+2gQ0ZProUysvd+4qyNvhWzXkhKPeISecHKOmaFQ4jJ3hmjLX7SGQF Jt+w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sd35-20020a1709076e2300b007ae52a5707bsi6821073ejc.95.2022.12.02.01.58.46; Fri, 02 Dec 2022 01:59:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233155AbiLBJtr (ORCPT + 99 others); Fri, 2 Dec 2022 04:49:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232887AbiLBJtj (ORCPT ); Fri, 2 Dec 2022 04:49:39 -0500 Received: from mx1.emlix.com (mx1.emlix.com [136.243.223.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 228C6C934F for ; Fri, 2 Dec 2022 01:49:37 -0800 (PST) Received: from mailer.emlix.com (p5098be52.dip0.t-ipconnect.de [80.152.190.82]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.emlix.com (Postfix) with ESMTPS id C60E05FF10; Fri, 2 Dec 2022 10:49:35 +0100 (CET) From: Edmund Berenson Cc: Edmund Berenson , Lukasz Zemla , Serge Semin , Mark Brown , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] spi: dw: Write chip configuration before cs is set Date: Fri, 2 Dec 2022 10:49:34 +0100 Message-Id: <20221202094934.9420-1-edmund.berenson@emlix.com> X-Mailer: git-send-email 2.37.4 MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751095864079685076?= X-GMAIL-MSGID: =?utf-8?q?1751095864079685076?= Using chips with different cpol, causes first communication to fail on cpol change. To avoid this issue write cr0 register before cs is set. Suggested-by: Lukasz Zemla Signed-off-by: Edmund Berenson --- drivers/spi/spi-dw-core.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 57c9e384d6d4..c3da4fe3e510 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -93,6 +93,7 @@ static inline void dw_spi_debugfs_remove(struct dw_spi *dws) void dw_spi_set_cs(struct spi_device *spi, bool enable) { struct dw_spi *dws = spi_controller_get_devdata(spi->controller); + struct dw_spi_chip_data *chip = spi_get_ctldata(spi); bool cs_high = !!(spi->mode & SPI_CS_HIGH); u8 enable_cs = 0; @@ -106,8 +107,13 @@ void dw_spi_set_cs(struct spi_device *spi, bool enable) * Enable register no matter whether the SPI core is configured to * support active-high or active-low CS level. */ - if (cs_high == enable) + if (cs_high == enable) { + dw_spi_enable_chip(dws, 0); + dw_writel(dws, DW_SPI_CTRLR0, chip->cr0); + dw_spi_enable_chip(dws, 1); + dw_writel(dws, DW_SPI_SER, BIT(enable_cs)); + } else dw_writel(dws, DW_SPI_SER, 0); }