From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1C00C00140 for ; Tue, 2 Aug 2022 17:58:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235290AbiHBR6a (ORCPT ); Tue, 2 Aug 2022 13:58:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232787AbiHBR61 (ORCPT ); Tue, 2 Aug 2022 13:58:27 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F2AC4F1BC for ; Tue, 2 Aug 2022 10:58:25 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id l19so827762wms.1 for ; Tue, 02 Aug 2022 10:58:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Vuo/vfkePpTgDDEhsrHOq8e5JZuKt6L4eA032kLF7mw=; b=PnFR54/krkQJBd9Cf9a4Xk/Fct0bWlowlgRa8ZaGY0hDslopTBk/b9JuMhEE9wm0nj f9CPxt4/15USCxyOb217JyqZOsQiP71VknMujxa5tmHdA9j3grppFgZSa9oqCWasMW3X txoksfC18gjyehYqyKNPtqZ4iYmIzSLBx9gFa9dYdLB5kX1fLLZpG/fADDodDAvQ1PtN SguY7LD2ouWC1j5H065nWm5J44FSj+T9zZmpase271yDX06aSD6u2v8YGIjDyfhAX4Ap 3QM+OZJ7Wxo1toFmslEvOmVhaDxVBB0YAAsfT0YMVsS6xXy//CvoCTVYgfPLxQuA1OmZ tygQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Vuo/vfkePpTgDDEhsrHOq8e5JZuKt6L4eA032kLF7mw=; b=Xxq6cXgV9LvhGqfZTNHWFUlNH3iR4C4tM/lbpGDOPGJnuJNeQ5QN+iTTpUMC5sMoP2 LTIJTKNeOYmZiFM3ziD7jYHpuD3lsl/3nmT0ONhF6x5xyDq+/XddkAX/EDP4xTucAL7k h+wifl7u/J4dWhSes9GoeE5lyH8DfQ7RMisziLhIJWvEFtJA8CrUgboxFXLEyC2KSTkZ bwqxEhhp5VW9r3XzCDJDkWCTtMP7LxkXpWhXACU12r3ypYRG9/YTNfKqtdcBtiWPx7oX 1fTg8wnnkVmVM75WaHcCE8HMw6zVs0v4nlG0G2SyE1gwxkRVfK+gDHXmTkKJMT23mFOb aYGQ== X-Gm-Message-State: ACgBeo1DgnQa+i0t9rFjcUsXGwNZbAsCJdjxWKdj8r6W37IPv1nEizjA DmMFfdoQKDefMqV9Lajp8AxDLg== X-Google-Smtp-Source: AA6agR7fgM/0HFHd9EIUlLwNLdq6e6BT/2vkCwL/gzJY507E1BFT1d+PE2SL6vS8x8gdqvrg6ZKFTQ== X-Received: by 2002:a05:600c:40cf:b0:3a3:1fd6:47b7 with SMTP id m15-20020a05600c40cf00b003a31fd647b7mr406810wmh.32.1659463103860; Tue, 02 Aug 2022 10:58:23 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:23 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 01/11] spi: dw: define capability for enhanced spi Date: Tue, 2 Aug 2022 18:57:45 +0100 Message-Id: <20220802175755.6530-2-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Some Synopsys SSI controllers support enhanced SPI which includes Dual mode, Quad mode and Octal mode. Define the capability and mention it in the controller supported modes. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 4 ++++ drivers/spi/spi-dw.h | 1 + 2 files changed, 5 insertions(+) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index f87d97ccd2d6..97e72da7c120 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -917,6 +917,10 @@ int dw_spi_add_host(struct device *dev, struct dw_spi = *dws) =20 master->use_gpio_descriptors =3D true; master->mode_bits =3D SPI_CPOL | SPI_CPHA | SPI_LOOP; + if (dws->caps & DW_SPI_CAP_EXT_SPI) + master->mode_bits |=3D SPI_TX_DUAL | SPI_RX_DUAL | + SPI_TX_QUAD | SPI_RX_QUAD | + SPI_TX_OCTAL | SPI_RX_OCTAL; if (dws->caps & DW_SPI_CAP_DFS32) master->bits_per_word_mask =3D SPI_BPW_RANGE_MASK(4, 32); else diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h index 9e8eb2b52d5c..71d18e9291a3 100644 --- a/drivers/spi/spi-dw.h +++ b/drivers/spi/spi-dw.h @@ -32,6 +32,7 @@ /* DW SPI controller capabilities */ #define DW_SPI_CAP_CS_OVERRIDE BIT(0) #define DW_SPI_CAP_DFS32 BIT(1) +#define DW_SPI_CAP_EXT_SPI BIT(2) =20 /* Register offsets (Generic for both DWC APB SSI and DWC SSI IP-cores) */ #define DW_SPI_CTRLR0 0x00 --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4307C19F28 for ; Tue, 2 Aug 2022 17:58:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235027AbiHBR6i (ORCPT ); Tue, 2 Aug 2022 13:58:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235319AbiHBR6e (ORCPT ); Tue, 2 Aug 2022 13:58:34 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 745DF4F1BC for ; Tue, 2 Aug 2022 10:58:32 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id v3so17895766wrp.0 for ; Tue, 02 Aug 2022 10:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4xON5/1RnjBTHOYTi8U3eC1G9Pht10d2+/+PE/oCDM8=; b=kDBdO+hRY7GGEfK3BrZAjRifF/FxSnBpdqBE5RTRkvK2+41NZPoMQ0DSrbX5Vq63HN jv2F8RuSflT3kmgJsznZ3Vw+ZM4dzzIlaiARzmp2HMjwZlnF0DvBYwBSJpO9JQqz/2ua AkF0nVK+2CZw2K/6HS4JmJJBjFCta96WWyKXdyEuNAvWx/fo5qH0VfCLOrYf8o5k5Vey Hzs0Vr/sNMNFqdUZMfRIS8dAE3tgh/r8nRH0luf+CqcDgalKNwOUgYd1XOaewHP3JrfG 0PLyhMwOlNBy0XdpblT15qNlmuMhaSeqqCvRNMJrI8WnPEw0xtU8BVoDh0wK8u3763rj 9lhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4xON5/1RnjBTHOYTi8U3eC1G9Pht10d2+/+PE/oCDM8=; b=wHg7XixuSCiUvIn1CzGYRJectBdzEn1Bu6o77EoTV1GyBXl7oYxm72CibaqZlihHwD UtgT16EvHRL0Hvr61kQHja7tnC+k2YPNMe4lYf5vZxmhE2KORpOhez5qFtozfwLdrLNG zvRRp/jXv2WhFoNXfWDjNe7VAiiQSSdLpyGO38cbpJkSDFbpnn6Hwe0v/RnTcmKdXRqj ne2dDfOR1JNFnj3s+rrEKOb2oMo1EcqnkQ2VhmuxEIKnlbdvYTYd45JKthXYbIXRNYk3 BKWWORwIJ+sZRJ/Nvxk4jR/4t3N1WTdQ7nES/h/VFOhBTViptlkNf0njG7SBhA15wsI0 2q7Q== X-Gm-Message-State: ACgBeo2dKJpJAoSQ4KthnyfMv5XvkC5hE0Q198Eqe3ZYcTI5OAGpipm5 +eRJfpTJm9f9h6e7eC8qJe4lkA== X-Google-Smtp-Source: AA6agR7f7dwanjYpEbjx2VufVCj+4oz4IFATBDBtRwOoC0bEAehgEene0qb5B2gm0Y13e+MUYyqOLQ== X-Received: by 2002:adf:e28c:0:b0:21e:660e:26aa with SMTP id v12-20020adfe28c000000b0021e660e26aamr13777281wri.345.1659463110904; Tue, 02 Aug 2022 10:58:30 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:30 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 02/11] spi: dw: add check for support of dual/quad/octal Date: Tue, 2 Aug 2022 18:57:46 +0100 Message-Id: <20220802175755.6530-3-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Before doing the mem op spi controller will be queried about the buswidths it supports. Add the dual/quad/octal if the controller has the DW_SPI_CAP_EXT_SPI capability. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 97e72da7c120..77529e359b6d 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -488,8 +488,23 @@ static int dw_spi_adjust_mem_op_size(struct spi_mem *m= em, struct spi_mem_op *op) static bool dw_spi_supports_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) { - if (op->data.buswidth > 1 || op->addr.buswidth > 1 || - op->dummy.buswidth > 1 || op->cmd.buswidth > 1) + struct dw_spi *dws =3D spi_controller_get_devdata(mem->spi->controller); + + /* + * Only support TT0 mode in enhanced SPI for now. + * TT0 =3D Instruction and Address will be sent in + * Standard SPI Mode. + */ + if (op->addr.buswidth > 1 || op->dummy.buswidth > 1 || + op->cmd.buswidth > 1) + return false; + + /* In enhanced SPI 1, 2, 4, 8 all are valid modes. */ + if (op->data.buswidth > 1 && (!(dws->caps & DW_SPI_CAP_EXT_SPI))) + return false; + + /* Only support upto 32 bit address in enhanced SPI for now. */ + if (op->data.buswidth > 1 && op->addr.nbytes > 4) return false; =20 return spi_mem_default_supports_op(mem, op); --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D04D6C00140 for ; Tue, 2 Aug 2022 17:58:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235779AbiHBR6s (ORCPT ); Tue, 2 Aug 2022 13:58:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235399AbiHBR6l (ORCPT ); Tue, 2 Aug 2022 13:58:41 -0400 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90C3150044 for ; Tue, 2 Aug 2022 10:58:39 -0700 (PDT) Received: by mail-wm1-x336.google.com with SMTP id n20-20020a05600c3b9400b003a4f2261a7eso240871wms.2 for ; Tue, 02 Aug 2022 10:58:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UjGXyUyDLmjMDOf8jNJMvPEYFg/F977ZxHxgmhAvnmc=; b=Qh2sccOhKOymfr5Qop+pGzCH8T+687LGQLFRfVvoM3mFqaGCRJEm0wRxg98se49s0U N+wb1c9mjaL4yVirYDILB0P0YX4NPYi9DAHEV9Eg2iI0V0j1C/dHTMTtSmubquYBNiE7 DDnG2uqIJDUgkqbyvgCoOMvk0rA64gM0k18LqPAeHBOB7RprdaxP2Dly/I1A27INmgug J9/3qEKHS2ciOpZsH7KiXSf/iiUZ3lvfArqouhz/x1xSOUF95ftI6SHX2sRSodB3Rnx4 vh5gK7ye8THHoD7z30L9YwPyRms6IcJ/FeyrpKmOO3bf4EVLHbxK1WRpsFHzzyT/4nMi ezJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UjGXyUyDLmjMDOf8jNJMvPEYFg/F977ZxHxgmhAvnmc=; b=nsMIHt2I/i3O3cb4lfkNRbrENkS625IKQhPhlKUPdtlKZzunD2IwWSi9ubW+odX/Be oO6+wxDARsh6RgKzWe36MDjmfHfosvr96Slmt0QSIVlAo5puHnYP52Lgpkz8Fq+n3ztd WcHX1fWhaIRxshLrgKZbfRWNEhNU7Rctp5OJCE8UfYnWRoCHfo1VYIHisLPewO5CJsSa wyma4IwueQGzPND2zHaWvHOqp0XNTy3GizYyw5n+U04DNmuGjR/6PFt8Q3HCbG5CatdI MQCWIsMO5hZ9/bV6rJWKTAElkU4iCftXrZl2Al460PbFCwdhVIZMKPxufpdMixOvmiqq RkDQ== X-Gm-Message-State: ACgBeo24Rixh2NhkMUhx4y08fN4nx6arIZhSGe6JrVml7c9sJ3XN9/r3 gqhbPHxPLl/UEKJ+R1J8xqby3NYXTTbe1g== X-Google-Smtp-Source: AA6agR4jqgI7Xs6iYK8jzlkHDKEuwOrDweCr7U8C/ikyOQNCqpvpyUePii/sxWpyirqjvlfe+oPfuA== X-Received: by 2002:a05:600c:19d2:b0:3a3:2cdb:cc02 with SMTP id u18-20020a05600c19d200b003a32cdbcc02mr382332wmq.182.1659463117937; Tue, 02 Aug 2022 10:58:37 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:37 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 03/11] spi: dw: define spi_frf for dual/quad/octal modes Date: Tue, 2 Aug 2022 18:57:47 +0100 Message-Id: <20220802175755.6530-4-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The SPI mode needs to be mentioned in CTRLR0[23:22] register. Define a configuration variable to keep the mode based on the buswidth, which will then be used to update CR0. If the transfer is using dual/quad/octal mode then mark enhanced_spi as true. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 29 +++++++++++++++++++++++++++++ drivers/spi/spi-dw.h | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 77529e359b6d..8c84a2e991b5 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -333,6 +333,14 @@ void dw_spi_update_config(struct dw_spi *dws, struct s= pi_device *spi, /* CTRLR0[11:10] Transfer Mode */ cr0 |=3D FIELD_PREP(DW_HSSI_CTRLR0_TMOD_MASK, cfg->tmode); =20 + if (dws->caps & DW_SPI_CAP_EXT_SPI) { + if (cfg->spi_frf) + cr0 |=3D FIELD_PREP(DW_HSSI_CTRLR0_SPI_FRF_MASK, + cfg->spi_frf); + else + cr0 &=3D ~DW_HSSI_CTRLR0_SPI_FRF_MASK; + } + dw_writel(dws, DW_SPI_CTRLR0, cr0); =20 if (cfg->tmode =3D=3D DW_SPI_CTRLR0_TMOD_EPROMREAD || @@ -679,10 +687,31 @@ static void dw_spi_stop_mem_op(struct dw_spi *dws, st= ruct spi_device *spi) static int dw_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op= *op) { struct dw_spi *dws =3D spi_controller_get_devdata(mem->spi->controller); + bool enhanced_spi =3D false; struct dw_spi_cfg cfg; unsigned long flags; int ret; =20 + if (dws->caps & DW_SPI_CAP_EXT_SPI) { + switch (op->data.buswidth) { + case 2: + cfg.spi_frf =3D DW_SSI_CTRLR0_SPI_FRF_DUAL_SPI; + enhanced_spi =3D true; + break; + case 4: + cfg.spi_frf =3D DW_SSI_CTRLR0_SPI_FRF_QUAD_SPI; + enhanced_spi =3D true; + break; + case 8: + cfg.spi_frf =3D DW_SSI_CTRLR0_SPI_FRF_OCT_SPI; + enhanced_spi =3D true; + break; + default: + cfg.spi_frf =3D 0; + break; + } + } + /* * Collect the outbound data into a single buffer to speed the * transmission up at least on the initial stage. diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h index 71d18e9291a3..b8cc20e0deaa 100644 --- a/drivers/spi/spi-dw.h +++ b/drivers/spi/spi-dw.h @@ -96,6 +96,12 @@ #define DW_HSSI_CTRLR0_SRL BIT(13) #define DW_HSSI_CTRLR0_MST BIT(31) =20 +/* Bit fields in CTRLR0 for enhanced SPI */ +#define DW_HSSI_CTRLR0_SPI_FRF_MASK GENMASK(23, 22) +#define DW_SSI_CTRLR0_SPI_FRF_DUAL_SPI 0x1 +#define DW_SSI_CTRLR0_SPI_FRF_QUAD_SPI 0x2 +#define DW_SSI_CTRLR0_SPI_FRF_OCT_SPI 0x3 + /* Bit fields in CTRLR1 */ #define DW_SPI_NDF_MASK GENMASK(15, 0) =20 @@ -136,6 +142,7 @@ struct dw_spi_cfg { u8 dfs; u32 ndf; u32 freq; + u8 spi_frf; }; =20 struct dw_spi; --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E35CFC19F28 for ; Tue, 2 Aug 2022 17:59:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233110AbiHBR7H (ORCPT ); Tue, 2 Aug 2022 13:59:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235628AbiHBR6u (ORCPT ); Tue, 2 Aug 2022 13:58:50 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 854B9501A2 for ; Tue, 2 Aug 2022 10:58:45 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id z17so14126935wrq.4 for ; Tue, 02 Aug 2022 10:58:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Aw1T0LbIz46FjjhEEbnLK9sG6AnjTXA0RQTg3FMEtWM=; b=Ll4PnsHqjC5+Apl2W8TRgizSTL+qM2QieFGnFpMfahQhwmC8gZ/Kk8LM2I1Kc53PKK PEdle2T8rddCGvPtKyNMr+jtvzu6O8PICLizWGr66hyw4Qr3hNenamiKSwZKdNV9aUg2 A/wQLuDOrowXD22RcDzolkucJsDFPQFaI9v+QkSOXx2I8hQXQUd6pB9qsA6vZy9v2yyy RYRyq2KzCZMdr0dSDzNzfxGvT0iL1p40OZCt9/k1GQsjyyDwXZCSYFRK8xdgKqurWJGp R6sOn0SdphcTQHt3uz8vHh/e+vaIVipucgnYy0XwGjaw24TJZtb50jxGxI4loltUZ1RI +CgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Aw1T0LbIz46FjjhEEbnLK9sG6AnjTXA0RQTg3FMEtWM=; b=PMeT12B8ZRmS2BluO6FL0mrYh+YOw2I87K+9pSUKfnt9QQz+AeuF72d277KQg6xWBg e4iWl0cRNSzH8LILb1CmSL/fXi6uyI0Y8ES7BpFl61T9j8+OEKXqPVDVd1vYrLUeha29 YtWHBzE59o/dcZA/Q0RJ/yvBSrVfIDAqHMi0PAMxT3xKLFVFQqozbWqmpKq69lVAuilE F4L3vTru859NeAw5rNfDasUQ5y+mLjt+q+Yt1/aTN7rSTc4WKT7HRjOir1XAiOznoc69 uUmq4UKgI261VJeqFBu4k+XbvoOvtf9C+UVdicwTJpDGE99VF5dM/yHaNzIt2zSBX/ec OUdg== X-Gm-Message-State: ACgBeo2qaSlL2rjNcD+04Y/+ZQA4PMCTe4X5OphT5K6zHMGmBAPsEHL2 StTiYsFRZ797xs2hi2oZVylvRg== X-Google-Smtp-Source: AA6agR4sdG+OszyDwS/xWBJBhqDVwrVLMzLZwntiGrHw6bgHBiVdM59zNXn91whjJuu2BHpsFzgl7A== X-Received: by 2002:adf:de05:0:b0:220:6c9e:5fd9 with SMTP id b5-20020adfde05000000b002206c9e5fd9mr3982511wrm.260.1659463124948; Tue, 02 Aug 2022 10:58:44 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:44 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 04/11] spi: dw: use TMOD_RO to read in enhanced spi modes Date: Tue, 2 Aug 2022 18:57:48 +0100 Message-Id: <20220802175755.6530-5-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When we are using the enhanced spi modes we can not use EEPROM Read. The Synopsys datasheet mentions EEPROM Read is not applicable in enhanced SPI modes. We will need to use Receive only mode. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 8c84a2e991b5..8e624620864f 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -727,7 +727,10 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, con= st struct spi_mem_op *op) cfg.dfs =3D 8; cfg.freq =3D clamp(mem->spi->max_speed_hz, 0U, dws->max_mem_freq); if (op->data.dir =3D=3D SPI_MEM_DATA_IN) { - cfg.tmode =3D DW_SPI_CTRLR0_TMOD_EPROMREAD; + if (enhanced_spi) + cfg.tmode =3D DW_SPI_CTRLR0_TMOD_RO; + else + cfg.tmode =3D DW_SPI_CTRLR0_TMOD_EPROMREAD; cfg.ndf =3D op->data.nbytes; } else { cfg.tmode =3D DW_SPI_CTRLR0_TMOD_TO; --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5BD64C00140 for ; Tue, 2 Aug 2022 17:59:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236160AbiHBR7Y (ORCPT ); Tue, 2 Aug 2022 13:59:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236146AbiHBR66 (ORCPT ); Tue, 2 Aug 2022 13:58:58 -0400 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADF9251415 for ; Tue, 2 Aug 2022 10:58:53 -0700 (PDT) Received: by mail-wr1-x435.google.com with SMTP id p10so14610669wru.8 for ; Tue, 02 Aug 2022 10:58:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MZTeoa87dfvJFG/ev+WcWMi6pJYHv4C0u5fdzNHZAPI=; b=KFQxbUGkbdnNFcpFvYllrGe2i0Oqt50GRp+xE1pLOFLMhInNKQfn+3LZZGA/cGowMi t2EfJVFt5mxOPw7T0ZE8McatT2X2faWr9NAd7sR7tVZDPDPDpgL8WIs9cjr15H0gI9nf aeJziL/uxBJfcwY+IIY1wRxhP+Y07KO/IgsJzMMOVIPYCMR/G4k7QMyN3iaXmEoKPu0S 5cEn2u8XF+bUkVehjle1MTjgz85hZf2O4nALxHMcgKsJ6MtDGbk5MBFTtbSq2xHYqd54 Vnv5CGE4MQf/BO9OH4wRG1NGsgIrIk4LWRgt0/wLBER++g+wZm5dRt+XIMzf0V5ywZwf flPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MZTeoa87dfvJFG/ev+WcWMi6pJYHv4C0u5fdzNHZAPI=; b=F1GWpaEl3NrwYbSXQeCx4q6lTtF1dOUeBBATs+kr6ZVM6XNjfIm8tU1Y0nCLoW+0vy jUoYnU/IXoZF46VoHEK5YLb3aBSKpNa+ssX409OaUjAHrRkkt3E1wMIhNjL8XkumGnzD EvcqzCaw8MCw2Zhe3Am/CjedxavR0tcAXN2hK8JQK9+f8/i69Jxu8qsJqJcI3rmOx4hL 4puDxk/ey2xr1qJn9A4i5gmdG2gOrmQLfZ2k27OAu56kJiaya6pmw30yBgSL0kX1sHcX 9PYMJgb6m3JIbZ7Vd2uBh2OwJIQ9OrknGdEVd1xuyOFVXBFkb2gC05MK/tDtHhXYpcH4 /w+w== X-Gm-Message-State: ACgBeo1V7RcIU76Jt8wMNPNNf5zLPiHDOi42B5FDImFJuQz/EAFTxfhz 67SQmgmwINa1AxZgPbLOlyESaQ== X-Google-Smtp-Source: AA6agR79yXvPO2icms6I7OLPLmvO8VuEh5kLencnb2xoh+3znDhpOEYXIDS0kCA0vjDXdTCpQd9ACw== X-Received: by 2002:a05:6000:42:b0:21f:dc5:5ce0 with SMTP id k2-20020a056000004200b0021f0dc55ce0mr14429646wrx.12.1659463131961; Tue, 02 Aug 2022 10:58:51 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:51 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 05/11] spi: dw: define SPI_CTRLR0 register and its fields Date: Tue, 2 Aug 2022 18:57:49 +0100 Message-Id: <20220802175755.6530-6-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Synopsys SSI controllers supporting enhanced SPI mode of operation has SPI Control Register at offset 0xf4 which controls the following: CLK_STRETCH_EN: Enables clock stretching capability in SPI transfers. In case of write, if the FIFO becomes empty DWC_ssi will stretch the clock until FIFO has enough data to continue the transfer. In case of read, if the receive FIFO becomes full DWC_ssi will stop the clock until data has been read from the FIFO. WAIT_CYCLES: Wait cycles in Dual/Quad/Octal mode between control frames transmit and data reception. INST_L: Dual/Quad/Octal mode instruction length in bits. ADDR_L: defines Length of Address to be transmitted. For now, we are only using 32bit Address length and 8 bit Instruction length. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h index b8cc20e0deaa..a7a4637d6d32 100644 --- a/drivers/spi/spi-dw.h +++ b/drivers/spi/spi-dw.h @@ -63,6 +63,17 @@ #define DW_SPI_RX_SAMPLE_DLY 0xf0 #define DW_SPI_CS_OVERRIDE 0xf4 =20 +/* Register offsets (Defined in DWC SSI 1.03a) */ +#define DW_HSSI_SPI_CTRLR0 0xf4 + +/* Bit fields in SPI_CTRLR0 (Defined in DWC SSI 1.03a) */ +#define DW_HSSI_SPI_CTRLR0_CLK_STRETCH_EN BIT(30) +#define DW_HSSI_SPI_CTRLR0_WAIT_CYCLE_MASK GENMASK(15, 11) +#define DW_HSSI_SPI_CTRLR0_INST_L_MASK GENMASK(9, 8) +#define DW_HSSI_SPI_CTRLR0_INST_L8 0x2 +#define DW_HSSI_SPI_CTRLR0_ADDR_L_MASK GENMASK(5, 2) +#define DW_HSSI_SPI_CTRLR0_ADDR_L32 0x8 + /* Bit fields in CTRLR0 (DWC APB SSI) */ #define DW_PSSI_CTRLR0_DFS_MASK GENMASK(3, 0) #define DW_PSSI_CTRLR0_DFS32_MASK GENMASK(20, 16) --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6FCC2C00140 for ; Tue, 2 Aug 2022 17:59:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236007AbiHBR7i (ORCPT ); Tue, 2 Aug 2022 13:59:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236455AbiHBR7I (ORCPT ); Tue, 2 Aug 2022 13:59:08 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 980F650710 for ; Tue, 2 Aug 2022 10:59:00 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id 129-20020a1c0287000000b003a2fa488efdso4548881wmc.4 for ; Tue, 02 Aug 2022 10:59:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=E4UV8naDvq3qTPSo5The0YIEVHRxQNXYLDteElqpqxc=; b=JEDdNc+SdwY9H7WGJA/h7gfZJT/8n7093kHisyTqxAECd0XnvlBbQZPIby2t91lvs5 LwH14ohei4NP0alduv/V0qZNQS4aFVRdknb/bzMN/PJw7g6OqHbHN45n7QV9eMFVulDN lvoMfjg9Est6l4Za5WJgVpfPqmIKkkDI6g+PnCExjWG667VSPxy9SQbJsrh+Rs18O0vj mU4AU/FbZJx0qYraQEtsdCA1xbB/0QUP1aSHd2S5YBzRaeLqseMTUJd3veDbC1ct/5Me MMb7VTgOaHgYubha4E0KnM8S1fU3RKhvIwoZfMSHCfmAjC44SmnSiNeEDxneVkMRsyPR rCfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=E4UV8naDvq3qTPSo5The0YIEVHRxQNXYLDteElqpqxc=; b=bhx1ECjuIpwVeuloCAWUhXCEzRh2YLk7LLq6ENqWBtgK135M9D5NeikPvqnqwwpV6U PR89ta1LrEtw7Pq3IaX5Kj1CDUGHPJJWyCTrlkTf/zQMpGr0BiRtcC6HaoQdkdD11DIu H9tHeJI8TxPWYV8BByRrNHJgavHt6567zUfjIeDGINoot25vHxrCovgxjI32hMGZs9km RCaGZVDBX7ccs77RLYvTfG71fhWrjTgprmLuutdrz23EYApA51I5dYtgRJ7DhsBCH9Bv o/ABc9HSCynnyMwx+63LZqX04oPih71gih4gSIkfmamfcUXt9VryHk7Sno1O3/902xfr 132w== X-Gm-Message-State: ACgBeo0hOP3akZoXZsrtc1GxcKOV9lb49scstUfRsvak4Piaj930u388 pigCAOcO943A+HvHD4j9XQZMT7i3zvAt5g== X-Google-Smtp-Source: AA6agR5oi5bh7J5T4XlHOaXxcqmZnSljMBeaUPSklXYLtjxO0JSI4hGEjQ3l7B3fG9zxrUDs2BCG4g== X-Received: by 2002:a7b:cbc4:0:b0:3a3:745d:ae5e with SMTP id n4-20020a7bcbc4000000b003a3745dae5emr411727wmi.12.1659463139006; Tue, 02 Aug 2022 10:58:59 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:58:58 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 06/11] spi: dw: update SPI_CTRLR0 register Date: Tue, 2 Aug 2022 18:57:50 +0100 Message-Id: <20220802175755.6530-7-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If the controller supports enhanced SPI modes then update the register or reset the register if the transfer is not using dual/quad/octal mode. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 8e624620864f..9d499bdf2ce6 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -676,6 +676,32 @@ static void dw_spi_stop_mem_op(struct dw_spi *dws, str= uct spi_device *spi) dw_spi_enable_chip(dws, 1); } =20 +static void update_spi_ctrl0(struct dw_spi *dws, const struct spi_mem_op *= op, bool enable) +{ + u32 spi_ctrlr0; + + spi_ctrlr0 =3D dw_readl(dws, DW_HSSI_SPI_CTRLR0); + if (enable) { + spi_ctrlr0 |=3D FIELD_PREP(DW_HSSI_SPI_CTRLR0_WAIT_CYCLE_MASK, + op->dummy.nbytes * BITS_PER_BYTE); + /* 8 bit instruction length */ + spi_ctrlr0 |=3D FIELD_PREP(DW_HSSI_SPI_CTRLR0_INST_L_MASK, + DW_HSSI_SPI_CTRLR0_INST_L8); + /* 32 bit address length */ + spi_ctrlr0 |=3D FIELD_PREP(DW_HSSI_SPI_CTRLR0_ADDR_L_MASK, + DW_HSSI_SPI_CTRLR0_ADDR_L32); + /* Enable clock stretching */ + spi_ctrlr0 |=3D DW_HSSI_SPI_CTRLR0_CLK_STRETCH_EN; + } else { + spi_ctrlr0 &=3D ~DW_HSSI_SPI_CTRLR0_WAIT_CYCLE_MASK; + spi_ctrlr0 &=3D ~DW_HSSI_SPI_CTRLR0_INST_L_MASK; + spi_ctrlr0 &=3D ~DW_HSSI_SPI_CTRLR0_ADDR_L_MASK; + spi_ctrlr0 &=3D ~DW_HSSI_SPI_CTRLR0_CLK_STRETCH_EN; + } + + dw_writel(dws, DW_HSSI_SPI_CTRLR0, spi_ctrlr0); +} + /* * The SPI memory operation implementation below is the best choice for the * devices, which are selected by the native chip-select lane. It's @@ -738,6 +764,9 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, cons= t struct spi_mem_op *op) =20 dw_spi_enable_chip(dws, 0); =20 + if (dws->caps & DW_SPI_CAP_EXT_SPI) + update_spi_ctrl0(dws, op, enhanced_spi); + dw_spi_update_config(dws, mem->spi, &cfg); =20 dw_spi_mask_intr(dws, 0xff); --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57AEEC00140 for ; Tue, 2 Aug 2022 17:59:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236085AbiHBR7p (ORCPT ); Tue, 2 Aug 2022 13:59:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232386AbiHBR7R (ORCPT ); Tue, 2 Aug 2022 13:59:17 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7A739222B0 for ; Tue, 2 Aug 2022 10:59:07 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id z12so8702420wrs.9 for ; Tue, 02 Aug 2022 10:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sl9Z98LrR1HGqesJuJI9JTYA1Pp0siEP1pFEoTfJVN4=; b=BraroAuIQqADk1cnPCUB+aLh71k99p66yNBjBE+daWZAXJlSqonJQiZ0FlH0EOzoWp qty7Gm9qCLCWysfVI6MKR3XEewBIan5xCzCgYM1vIWkV0Xhihh1EqDMYCmA3yG0OvsSP Vesref23GBooU7Y2ju9GiSMdXRzuYjwBDnOzRYUAs4cCxLUpB6XRzTiWq4DCt+s+pvUt ZNNPNHDsVuSMY4oojQy4b1QjHXc8NAZbRnObtruXL7xw1g+ckQ0/k+N7YRV2qcLZBsnj 5RRCUZvQgrpfIR75YsbOKLcogkxtn5cKFehPjzxmzCaaXnianjUUOqYVHWgBfcQXrZ2B jZtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sl9Z98LrR1HGqesJuJI9JTYA1Pp0siEP1pFEoTfJVN4=; b=zyS0b4OvfXA8TbvBaV4OplouF3GRTYKzxtTMy+s2XQxeyUPuhgsb58IYiIABOE6c75 R5ruaD5pX7VOVY5q6YIi3Pd8qNE0yx6470y2Qi4G3ynoM/qKbqWC4Xmv8iPl1zgToE/h i2lDw5DmVVnV16VZrk9qEdvlmcsZQC8SgBgZvyPwReYKK8MPjenw1gWByM7LTpgS68+i QfDRawCH1Xnt0M4D/zDOZmbDCwfrGaBwoAbLm0cQOK54loqtkRFfjU8ejobxQvmw1IKG JqdnJf2h5IICEjyuzn11gWHwPJi3YamCGmC0au0L7JbjBhwwvzEu1iMKtIgfZkiQqXeP eEBg== X-Gm-Message-State: ACgBeo1R+U/zv1vX6VKISmoOkqNCYuR2m4mxBYdzubZeLXdudAN6CN6/ 4GpPAXgxSdbTOSP1TYXxNszr/g== X-Google-Smtp-Source: AA6agR66+Jqszo7T/0P1VL5IUVzXM9piN1M4GBE4tIZBTx475dA6PJNPHMkQlN3ie5uOahqE3xClRQ== X-Received: by 2002:a05:6000:230:b0:21e:cf23:499f with SMTP id l16-20020a056000023000b0021ecf23499fmr14072388wrz.29.1659463146015; Tue, 02 Aug 2022 10:59:06 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.58.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:59:05 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 07/11] spi: dw: update NDF while writing in enhanced spi mode Date: Tue, 2 Aug 2022 18:57:51 +0100 Message-Id: <20220802175755.6530-8-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If the transfer of Transmit only mode is using dual/quad/octal SPI then NDF needs to be updated with the number of data frames. If the Transmit FIFO goes empty in-between, DWC_ssi masks the serial clock and wait for rest of the data until the programmed amount of frames are transferred successfully. Signed-off-by: Sudip Mukherjee --- 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 9d499bdf2ce6..8cb30540ad5b 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -344,7 +344,9 @@ void dw_spi_update_config(struct dw_spi *dws, struct sp= i_device *spi, dw_writel(dws, DW_SPI_CTRLR0, cr0); =20 if (cfg->tmode =3D=3D DW_SPI_CTRLR0_TMOD_EPROMREAD || - cfg->tmode =3D=3D DW_SPI_CTRLR0_TMOD_RO) + cfg->tmode =3D=3D DW_SPI_CTRLR0_TMOD_RO || + (cfg->tmode =3D=3D DW_SPI_CTRLR0_TMOD_TO && + (dws->caps & DW_SPI_CAP_EXT_SPI) && cfg->spi_frf)) dw_writel(dws, DW_SPI_CTRLR1, cfg->ndf ? cfg->ndf - 1 : 0); =20 /* Note DW APB SSI clock divider doesn't support odd numbers */ @@ -760,6 +762,8 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, cons= t struct spi_mem_op *op) cfg.ndf =3D op->data.nbytes; } else { cfg.tmode =3D DW_SPI_CTRLR0_TMOD_TO; + if (enhanced_spi) + cfg.ndf =3D op->data.nbytes; } =20 dw_spi_enable_chip(dws, 0); --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F22BC00140 for ; Tue, 2 Aug 2022 17:59:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236826AbiHBR7z (ORCPT ); Tue, 2 Aug 2022 13:59:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236661AbiHBR7W (ORCPT ); Tue, 2 Aug 2022 13:59:22 -0400 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BF63950078 for ; Tue, 2 Aug 2022 10:59:14 -0700 (PDT) Received: by mail-wr1-x434.google.com with SMTP id z16so18752038wrh.12 for ; Tue, 02 Aug 2022 10:59:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TuVepJCF1VhVPp+n/Z+Mnas7S62uFs9HoLlJ9erehas=; b=Kh3BCvMHHboARNWPh+RZPNmF9sYIrBO7nPt45FCa8GN9tB2w9qCoaNVgD3b7jnUHMl S6lPilv9DEklvzoPj1XutlezBbig85yBT9g26SOg//OLdG6RpUQLCtj7wKaoI0TzRJJx UWLYQpS0UkouP83VdDHyBdnn9wIuQjFnBf4En4VYF04AWxJoKo5b6z2FRdlquLqvIFXE tiosmLf5zMLjPbPy7zk2eQBazgs3kg7cRpEXo2MJLws0+/jN7vfhfIBZ6fDxgsXmymMO Va5KIYInk+h90EiUizduw1QJzA8+UpOpvHCg9eMcUZUxhMn83wvo6iD5BYS2UWGLqMth FL0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TuVepJCF1VhVPp+n/Z+Mnas7S62uFs9HoLlJ9erehas=; b=A5lxQ7px5ymoiqwtwhQftvQ0uxHBkHyyH2TWqtJsvvx3QlaF4t3zigHSnlz/CWqKRG 9Iae9MbQ1qvjP5N5oGYV0rSWVa9LU1x+6rYQeWx7f13W/Vfi3ebiuL21ame1vKJT/QyJ 2CTb3+cNIX7Vvf8oNlV3wcLxY0xfvwaWmVrLMqjF6QZfeXqC0VcBvJJVXlZwn2B0NtCL U5etgFij9Ayerlcbrai3gZTMCGqiavDPG68ySLPmBHtERhg7eqyv+dt4qD0oBhXYfAB/ 9Kq+5d64UkpiuYXIto9AdviHrjb6e6tW+5m3gsaJV5ZrPz2LVr11F1zu4WYlDA5Kmh++ BI9g== X-Gm-Message-State: ACgBeo3MeJkfOYajC5YM0yqhS43QYIdsJMtsuukRC0+rOYDAUlzeYHU1 nlJpq2OWnk9ZU/0g6v+3wsMNjQ== X-Google-Smtp-Source: AA6agR7iyUkADRLOH839oPzAEPSkTF/AuRmupZXbEonsdqFKTvF5lHGdTGS+I/IpSwJQEMuG1V69qw== X-Received: by 2002:a5d:584f:0:b0:21d:bcd6:5c8e with SMTP id i15-20020a5d584f000000b0021dbcd65c8emr13590680wrf.60.1659463153096; Tue, 02 Aug 2022 10:59:13 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.59.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:59:12 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 08/11] spi: dw: update buffer for enhanced spi mode Date: Tue, 2 Aug 2022 18:57:52 +0100 Message-Id: <20220802175755.6530-9-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In enhanced spi mode we will be writing the address to a single FIFO location instead of writing to multiple FIFOs in the standard SPI mode. Save the cmd and address bytes in the buffer accordingly. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 55 ++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 8cb30540ad5b..2564a2276572 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -520,7 +520,8 @@ static bool dw_spi_supports_mem_op(struct spi_mem *mem, return spi_mem_default_supports_op(mem, op); } =20 -static int dw_spi_init_mem_buf(struct dw_spi *dws, const struct spi_mem_op= *op) +static int dw_spi_init_mem_buf(struct dw_spi *dws, const struct spi_mem_op= *op, + bool enhanced_spi) { unsigned int i, j, len; u8 *out; @@ -548,17 +549,57 @@ static int dw_spi_init_mem_buf(struct dw_spi *dws, co= nst struct spi_mem_op *op) */ for (i =3D 0; i < op->cmd.nbytes; ++i) out[i] =3D DW_SPI_GET_BYTE(op->cmd.opcode, op->cmd.nbytes - i - 1); - for (j =3D 0; j < op->addr.nbytes; ++i, ++j) - out[i] =3D DW_SPI_GET_BYTE(op->addr.val, op->addr.nbytes - j - 1); - for (j =3D 0; j < op->dummy.nbytes; ++i, ++j) - out[i] =3D 0x0; + + if (enhanced_spi) { + /* + * Fill the remaining spaces of dws->reg_io_width bytes + * size register with zero for cmd. + */ + for (; i < dws->reg_io_width; ++i) + out[i] =3D 0; + /* + * Copy the address bytes in dws->reg_io_width bytes size + * register and fill remaining spaces with zero. + */ + for (j =3D op->addr.nbytes; j > 0; ++i, --j) + out[i] =3D DW_SPI_GET_BYTE(op->addr.val, op->addr.nbytes - j); + for (j =3D op->addr.nbytes; j < dws->reg_io_width; ++i, ++j) + out[i] =3D 0; + } else { + for (j =3D 0; j < op->addr.nbytes; ++i, ++j) + out[i] =3D DW_SPI_GET_BYTE(op->addr.val, op->addr.nbytes - j - 1); + } + + if (!enhanced_spi) { + /* + * dummy bytes are not needed in enhanced mode as + * wait_cycles specified as number of SPI clock cycles + * between control frames transmit and data reception + * will be mentioned in enhanced spi mode. + */ + for (j =3D 0; j < op->dummy.nbytes; ++i, ++j) + out[i] =3D 0x0; + } =20 if (op->data.dir =3D=3D SPI_MEM_DATA_OUT) memcpy(&out[i], op->data.buf.out, op->data.nbytes); =20 dws->n_bytes =3D 1; dws->tx =3D out; - dws->tx_len =3D len; + + if (enhanced_spi) { + /* + * In enhanced mode cmd will be one FIFO and address + * will be one more FIFO. + */ + dws->tx_len =3D 1; + if (op->addr.nbytes) + dws->tx_len +=3D 1; + if (op->data.dir =3D=3D SPI_MEM_DATA_OUT) + dws->tx_len +=3D op->data.nbytes; + } else { + dws->tx_len =3D len; + } if (op->data.dir =3D=3D SPI_MEM_DATA_IN) { dws->rx =3D op->data.buf.in; dws->rx_len =3D op->data.nbytes; @@ -744,7 +785,7 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, cons= t struct spi_mem_op *op) * Collect the outbound data into a single buffer to speed the * transmission up at least on the initial stage. */ - ret =3D dw_spi_init_mem_buf(dws, op); + ret =3D dw_spi_init_mem_buf(dws, op, enhanced_spi); if (ret) return ret; =20 --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 708DFC19F28 for ; Tue, 2 Aug 2022 18:00:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230354AbiHBSAF (ORCPT ); Tue, 2 Aug 2022 14:00:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236146AbiHBR71 (ORCPT ); Tue, 2 Aug 2022 13:59:27 -0400 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B465F5005A for ; Tue, 2 Aug 2022 10:59:20 -0700 (PDT) Received: by mail-wr1-x434.google.com with SMTP id z16so18752416wrh.12 for ; Tue, 02 Aug 2022 10:59:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EgBNPFA6iH7qw2lvPfZZWo2zsFGuQgHM3NShlMf43pY=; b=PF6fBnKlQ88A9aTw15wV58rFsRu/CLh/WhHzPYx/W3mpot5tutkCFEV2KkEEweaKqi ZMdSlXszL6AV+LTJWr+A5j5c3xEhliVkvKrOkPwqMoH+dR4I0cY4XnT/2MrKuvE3QAdE JTMqFuCcuO2RR+lraL6es3E1oqaa6FQyibyfHy1mZlOflz7eaKjem3HZkR1SUqBe2x5B otpaJtQqp/5F0xv2A6zFs9659cBYzAnpxF83u+f0nbHfo1Gf2z9z4TqTkYCJR2Yfnir+ y315Prw9EJAwO1lRVfbmJds8Hxxts6cIoOR/w2dcCLDE1PwLI8Z2FpC6DsXqvWIy7+iC 34LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EgBNPFA6iH7qw2lvPfZZWo2zsFGuQgHM3NShlMf43pY=; b=QWT0GDFFKpWd2jYsKF14XZG4GqFgXUivoTaNFavr0vwhB9N6WRpme1NQkimlZP/Eno VkIinxGTFfFW6Y0duDNIHhUdlFLNQhjtDTpDUkoliKvcBEevMIy8K1Jtxutm/THg5sY2 tuJwKmEbKTy6qXdVjdYRn/8CgTL675JbVB+9tlckPw7SgC+dvpqXFER134D+Qqw+3/q8 hFCcNzZj+eg3U/QdS7SVWNO/1/rZ3uz8nXmlljrT95WLf5A1cXLvj8syN74zgyB9SB// gtSlnDaDvYXgt0HMKvHJAhgJbQyH3KJbPrfJoL8MCvxt2PPE6ximi4SzzA1CB/vr0AUO MWrA== X-Gm-Message-State: ACgBeo1EsYrJSGDtdZiIPmLH1brjVgC6RLZJh3mX/YG2Z6aNc0pgbIws 1vR6WaKNDP18T1b4ThKlP1cZ8Q== X-Google-Smtp-Source: AA6agR4+Xe7fQqjK1UteZlARwyFQQy84pkaf8BFmW88PyIz3BjbwgCCLs+QpO1C+QFvSgB9IjCv0Lg== X-Received: by 2002:adf:ebc5:0:b0:21d:640e:dc2f with SMTP id v5-20020adfebc5000000b0021d640edc2fmr13819804wrn.227.1659463160197; Tue, 02 Aug 2022 10:59:20 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.59.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:59:19 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 09/11] spi: dw: prepare the transfer routine for enhanced mode Date: Tue, 2 Aug 2022 18:57:53 +0100 Message-Id: <20220802175755.6530-10-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The transfer routine of dual/quad/octal is similar to standard SPI mode except that we do not need to worry about CS being de-asserted and we will be writing the address to a single FIFO location. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-core.c | 141 +++++++++++++++++++++++++++++++++----- 1 file changed, 125 insertions(+), 16 deletions(-) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 2564a2276572..d6afa75e7023 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -712,6 +712,28 @@ static int dw_spi_wait_mem_op_done(struct dw_spi *dws) return 0; } =20 +static void ext_transfer_delay(struct dw_spi *dws) +{ + struct spi_delay delay; + unsigned long ns, us; + u32 nents; + + nents =3D dw_readl(dws, DW_SPI_TXFLR); + ns =3D NSEC_PER_SEC / dws->current_freq * nents; + ns *=3D dws->n_bytes * BITS_PER_BYTE; + if (ns <=3D NSEC_PER_USEC) { + delay.unit =3D SPI_DELAY_UNIT_NSECS; + delay.value =3D ns; + } else { + us =3D DIV_ROUND_UP(ns, NSEC_PER_USEC); + delay.unit =3D SPI_DELAY_UNIT_USECS; + delay.value =3D clamp_val(us, 0, USHRT_MAX); + } + /* wait until there is some space in TX FIFO */ + while (!(dw_readl(dws, DW_SPI_SR) & DW_SPI_SR_TF_NOT_FULL)) + spi_delay_exec(&delay, NULL); +} + static void dw_spi_stop_mem_op(struct dw_spi *dws, struct spi_device *spi) { dw_spi_enable_chip(dws, 0); @@ -719,6 +741,82 @@ static void dw_spi_stop_mem_op(struct dw_spi *dws, str= uct spi_device *spi) dw_spi_enable_chip(dws, 1); } =20 +static int enhanced_transfer(struct dw_spi *dws, struct spi_device *spi, + const struct spi_mem_op *op) +{ + u32 max, txw =3D 0, rxw; + bool cs_done =3D false; + void *buf =3D dws->tx; + int ret; + + /* Send cmd as 32 bit value */ + if (buf) { + txw =3D *(u32 *)(buf); + dw_write_io_reg(dws, DW_SPI_DR, txw); + buf +=3D 4; + dws->tx_len--; + if (op->addr.nbytes) { + /* + * Send address as 32 bit value if address + * is present in the instruction. + */ + txw =3D *(u32 *)(buf); + dw_write_io_reg(dws, DW_SPI_DR, txw); + buf +=3D 4; + dws->tx_len--; + } + } + + do { + max =3D min_t(u32, dws->tx_len, dws->fifo_len - + dw_readl(dws, DW_SPI_TXFLR)); + while (max--) { + if (buf) { + txw =3D *(u8 *)(buf); + buf +=3D dws->n_bytes; + } + dw_write_io_reg(dws, DW_SPI_DR, txw); + --dws->tx_len; + } + /* Enable CS after filling up FIFO */ + if (!cs_done) { + dw_spi_set_cs(spi, false); + cs_done =3D true; + } + ext_transfer_delay(dws); + if (!dws->tx_len && !dws->rx_len) { + /* + * We only need to wait for done if there is + * nothing to receive and there is nothing more + * to transmit. If we are receiving, then the + * wait cycles will make sure we wait. + */ + ret =3D dw_spi_wait_mem_op_done(dws); + if (ret) + return ret; + } + } while (dws->tx_len); + + buf =3D dws->rx; + while (dws->rx_len) { + max =3D dw_spi_rx_max(dws); + + while (max--) { + rxw =3D dw_read_io_reg(dws, DW_SPI_DR); + if (buf) { + *(u8 *)(buf) =3D rxw; + buf +=3D dws->n_bytes; + } + --dws->rx_len; + } + + ret =3D dw_spi_check_status(dws, true); + if (ret) + return ret; + } + return 0; +} + static void update_spi_ctrl0(struct dw_spi *dws, const struct spi_mem_op *= op, bool enable) { u32 spi_ctrlr0; @@ -846,25 +944,36 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, co= nst struct spi_mem_op *op) * manually restricting the SPI bus frequency using the * dws->max_mem_freq parameter. */ - local_irq_save(flags); - preempt_disable(); + if (!enhanced_spi) { + local_irq_save(flags); + preempt_disable(); =20 - ret =3D dw_spi_write_then_read(dws, mem->spi); + ret =3D dw_spi_write_then_read(dws, mem->spi); =20 - local_irq_restore(flags); - preempt_enable(); + local_irq_restore(flags); + preempt_enable(); =20 - /* - * Wait for the operation being finished and check the controller - * status only if there hasn't been any run-time error detected. In the - * former case it's just pointless. In the later one to prevent an - * additional error message printing since any hw error flag being set - * would be due to an error detected on the data transfer. - */ - if (!ret) { - ret =3D dw_spi_wait_mem_op_done(dws); - if (!ret) - ret =3D dw_spi_check_status(dws, true); + /* + * Wait for the operation being finished and check the + * controller status only if there hasn't been any + * run-time error detected. In the former case it's + * just pointless. In the later one to prevent an + * additional error message printing since any hw error + * flag being set would be due to an error detected on + * the data transfer. + */ + if (!ret) { + ret =3D dw_spi_wait_mem_op_done(dws); + if (!ret) + ret =3D dw_spi_check_status(dws, true); + } + } else { + /* + * We donot need to disable IRQs as clock stretching will + * be enabled in enhanced mode which will prevent CS + * from being de-assert. + */ + ret =3D enhanced_transfer(dws, mem->spi, op); } =20 dw_spi_stop_mem_op(dws, mem->spi); --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C9FDC00140 for ; Tue, 2 Aug 2022 18:00:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231665AbiHBSAM (ORCPT ); Tue, 2 Aug 2022 14:00:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47692 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236063AbiHBR7i (ORCPT ); Tue, 2 Aug 2022 13:59:38 -0400 Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5D8352440 for ; Tue, 2 Aug 2022 10:59:28 -0700 (PDT) Received: by mail-wm1-x335.google.com with SMTP id b6so7570911wmq.5 for ; Tue, 02 Aug 2022 10:59:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GcoYEB+LR9XunENDegpBIP0LqpENWfoItafTlDKOv+I=; b=WMOKG78H365a+1ElleuamwOz5x7nE0mLG5uTbACzumPhRGmXv5sfab7nXNUXyJdJMI DPhDLCcfuHwwQcC7c5okRHgmuwAtp3QP27/pORFDgtfkIWXiASsO8Bq+zPe0/KGUpE1L +Ik6nx+dxN8mlk2tdCHFhuvYghGT2IcziEpmNxv7ur3VBpxILD5yuQ2W8muRXiC862sO 2nbXa9dp2dof6J/8Jpiu7kUqHGJgdmNIkUiiTFpazlhkyXn5ZNo0X6mXdYgY+6l5hU3B c+SB1ZSOXOPDNESG7khQQgVLGRJlZO0sCCgfxrbBYfAi6H03cUSZWg6zysJrcIBhNGYJ iDIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GcoYEB+LR9XunENDegpBIP0LqpENWfoItafTlDKOv+I=; b=AjiNPYYFzNxanCgE04mxgxN4R8IxUSuVPpl8xOpoFQYRVqpxwj8SlYH9y1VoCTbWja BxV8FumR2anfgFO0/FEc57r+vSD/GxudoltX50poYiK9NR2DlAh7mBTHRIHm0HmM/66G N4N378U5VOyDCCNatW98S9ZIM5UGfkwr1QP/vw1dFjH8SifhthWYDO9sbo6hb6qiOTcU KhksINyBdGlBcMH0zOWeJZMyoLMsooqj+2PhYdMiejSCM7JA7ieYRS52DSZNNIIyEDn7 ptidrr7ilWy+UEH88MeYshHDPWAIbnETDe8eEj2c0xslKNbOKriyvVbj0o5dZABP+CZ6 244w== X-Gm-Message-State: ACgBeo1s2CKjzy3Xk8x1BkfzYoGvybwYHgSl6P4xREcbiSsHoEkE8yOp B9XgF+5PPrJ9g22KjmOtSawLQg== X-Google-Smtp-Source: AA6agR7FIi17LUA0EXeBzFgwdWxt0gU7tveiwLFLYacKYX2TSURwQiGl8iMhtl52FemdGm66uw4aQA== X-Received: by 2002:a05:600c:3786:b0:3a3:19d4:293f with SMTP id o6-20020a05600c378600b003a319d4293fmr404947wmr.116.1659463167235; Tue, 02 Aug 2022 10:59:27 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.59.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:59:26 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 10/11] spi: dw-apb-ssi: add generic 1.03a version Date: Tue, 2 Aug 2022 18:57:54 +0100 Message-Id: <20220802175755.6530-11-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Ben Dooks Add new snps,dw-ssi-1.03a version to the bindings. Signed-off-by: Ben Dooks Signed-off-by: Sudip Mukherjee Acked-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml b/D= ocumentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml index 37c3c272407d..35aa04a85813 100644 --- a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml +++ b/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml @@ -45,6 +45,7 @@ properties: enum: - snps,dw-apb-ssi - snps,dwc-ssi-1.01a + - snps,dwc-ssi-1.03a - description: Microsemi Ocelot/Jaguar2 SoC SPI Controller items: - enum: --=20 2.30.2 From nobody Sun Apr 12 00:54:35 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 729E2C00140 for ; Tue, 2 Aug 2022 18:00:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231782AbiHBSA2 (ORCPT ); Tue, 2 Aug 2022 14:00:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236809AbiHBR7t (ORCPT ); Tue, 2 Aug 2022 13:59:49 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFD48501BA for ; Tue, 2 Aug 2022 10:59:35 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id l19so829273wms.1 for ; Tue, 02 Aug 2022 10:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dksoanYJoZO8G01KR5WlaEaO1JRamu4a/M2lotcY4Us=; b=cJzyb6w6buAT4Si/LRbYnFJOIEuXMT96PIUp3Cza/fREQOsThox0SJ6o43dJ8Pk7Jn LfbiSVkviFwvZJBQYr+raawJje3EleuA5fdAPHnphp2Gh1S+bSPoAjazyFNpL/0wjZQW mOTBUX6qkVmcZV7JM1FeRCSGNHWmpzJO/bCYb3K7vNQzTFwsx7cf9jAMIsz3SpL6mAE5 Z8hr56URVZjl1JOV3bZ0qHtEl1yYfNR/kIMtfv42fk1H7agRsFbQ1duZeLMGWewzeqeB qiezCxTu4w6G496EFPEw+GTc0UbnK0C1sRsu5WZjzMToAq1sWQQGA/LPMsWMW06ELxj3 zuKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dksoanYJoZO8G01KR5WlaEaO1JRamu4a/M2lotcY4Us=; b=l8UXoIBMB6boLP4aQgXtrn+HOG1cjGE8zZl9gNn+eRKPgLyfgRAEfUwddQB08q+Gi0 HcZ/vd0nl8Fpte8KqO4p0+MKibtzCKCSsLcGB1cX7upqwW4UJORvfJAj+9ZBSzk/Ic3B QsQ4oDT+B0rBQlAmmatnNoO0eyxQqtFLFB9RIAEzgtHppT10CGq2NrkC+gxemGjYzHoB naNEDF2JLM3BfbM1tWE8kGE48AeDuqntsn8J3wi0bj3vAFVPAJ1aufCU9eKArGlYyhNu a0r7Iqmp7WOKa+F+PViKGVCip/UYzv7qYL+TKnbNJysNCUA9gFLtXiTyCI5dLQfXiN0v 83fA== X-Gm-Message-State: ACgBeo2in27NqQbllplC+OdJTcoeGSxCrzWiO417p1KJOvop8N6YO86v 4RXXQCsU5HbuAhCc4vTk6w6HZw== X-Google-Smtp-Source: AA6agR557a68A28uaXoSIeKdmvNzbTM0Ny3U/oteTSHz5ZHwIapC+B9nEc6H0RjuhnZ2aK0AhXbE5g== X-Received: by 2002:a1c:2783:0:b0:3a2:fd82:bf46 with SMTP id n125-20020a1c2783000000b003a2fd82bf46mr382235wmn.29.1659463174307; Tue, 02 Aug 2022 10:59:34 -0700 (PDT) Received: from debian.office.codethink.co.uk ([2405:201:8005:8149:e5c9:c0ac:4d82:e94b]) by smtp.gmail.com with ESMTPSA id 9-20020a05600c020900b003a3187a2d4csm23318222wmi.22.2022.08.02.10.59.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Aug 2022 10:59:33 -0700 (PDT) From: Sudip Mukherjee To: Serge Semin , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: greentime.hu@sifive.com, jude.onyenegecha@sifive.com, william.salmon@sifive.com, adnan.chowdhury@sifive.com, ben.dooks@sifive.com, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jeegar.lakhani@sifive.com, Sudip Mukherjee Subject: [PATCH 11/11] spi: dw: initialize dwc-ssi-1.03a controller Date: Tue, 2 Aug 2022 18:57:55 +0100 Message-Id: <20220802175755.6530-12-sudip.mukherjee@sifive.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220802175755.6530-1-sudip.mukherjee@sifive.com> References: <20220802175755.6530-1-sudip.mukherjee@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Define the initialization of dwc-ssi-1.03a controller and mark it with the capability of enhanced SPI supporting dual/quad/octal modes of transfer. Signed-off-by: Sudip Mukherjee --- drivers/spi/spi-dw-mmio.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index 26c40ea6dd12..db80e0645172 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c @@ -237,6 +237,15 @@ static int dw_spi_canaan_k210_init(struct platform_dev= ice *pdev, return 0; } =20 +static int dw_spi_hssi_ext_init(struct platform_device *pdev, + struct dw_spi_mmio *dwsmmio) +{ + dwsmmio->dws.ip =3D DW_HSSI_ID; + dwsmmio->dws.caps =3D DW_SPI_CAP_EXT_SPI; + + return 0; +} + static int dw_spi_mmio_probe(struct platform_device *pdev) { int (*init_func)(struct platform_device *pdev, @@ -352,6 +361,7 @@ static const struct of_device_id dw_spi_mmio_of_match[]= =3D { { .compatible =3D "intel,thunderbay-ssi", .data =3D dw_spi_intel_init}, { .compatible =3D "microchip,sparx5-spi", dw_spi_mscc_sparx5_init}, { .compatible =3D "canaan,k210-spi", dw_spi_canaan_k210_init}, + { .compatible =3D "snps,dwc-ssi-1.03a", dw_spi_hssi_ext_init}, { /* end of table */} }; MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match); --=20 2.30.2