Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp703622pxv; Thu, 22 Jul 2021 10:07:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxvTsglOfQOu8MjRnSGj4854OO/BB+JmfPI7AyCfIujaw6B9iB2xW04TVaklTuf4Z5wsJ+X X-Received: by 2002:a05:6402:2154:: with SMTP id bq20mr732349edb.111.1626973621217; Thu, 22 Jul 2021 10:07:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626973621; cv=none; d=google.com; s=arc-20160816; b=wLa9N5NL3052zu3d5GYuNi3TQwNgwULVCEu95wX8CDxJaVn/ZmX5z0Rj5Jb4790j/K cBy0gTSkQCaJcQ9Xo1qCD7LGwPw0L68hR/9yYPyEmjgqc5KnlU188aBAth9bogniy11T beZNd4Ntz11/gRYKfOAVLde6utnboqYy5ZOJPHVUlKQ8HHbGMNY/0NHDfo8ANi1vIt1U HijRRwMyv2TY+MpGex19JwxUOvprLd9rzU5OYe+gsC2S5WCT0fcVIbyxQCeATmwYjK5U CqA2rFJgbA7C4TSiivLgP6SZq6Z/+/sQ892eS8Jhhq4kO6uH1S6Jf6IVH/s3UC7TewWr YmuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=d1fTJqPqwH1w/qQ/4WFyr762/U70g5oYLAiA1f/J100=; b=N2lm7JRyQoZIqKicN1asodFvhOG/ufWRew2kzXwcjN+qUdCDyH3T/CXsQNtK4OoBdE KHYdRWUiYjfGZ2PfjUNAhMNsHcOs4+AmsZ27AMZHD8FwLL4dueeiXTOUmGLY+72BsQbU kyRYeipZ7l+AdW2B1NPacJedKwRtNKXjcVXTQcUlvyYRjwuGwGOPewESGpeKdZnCoKHk dixhIszPk1iQSXZIjFfMLebbod6Lu4IEdsWdBSm26bDcq1sIiHZNOP/G7pJEzayllNJW sEBxIXqSOWgKXopq5ga9rqy0QlT7bQbE1slic5uhInqMtXcvsLAqMCMZGywfy3nzzg5/ unHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=WWmdWDTT; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n1si31794492edy.32.2021.07.22.10.06.37; Thu, 22 Jul 2021 10:07:01 -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=@gmail.com header.s=20161025 header.b=WWmdWDTT; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233243AbhGVQYO (ORCPT + 99 others); Thu, 22 Jul 2021 12:24:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230329AbhGVQYH (ORCPT ); Thu, 22 Jul 2021 12:24:07 -0400 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3ADA7C061575; Thu, 22 Jul 2021 10:04:40 -0700 (PDT) Received: by mail-lf1-x12e.google.com with SMTP id f30so9553836lfv.10; Thu, 22 Jul 2021 10:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=d1fTJqPqwH1w/qQ/4WFyr762/U70g5oYLAiA1f/J100=; b=WWmdWDTTDKA9RdDgn6BAw/g341JGPLRyv3fWqXGg2XdG+tMmqekvdC0X5FahHTUvpv bgU6EBFO5q8AsnMC+/ImvafcXEKbxAHLyeENphheMhzFWmJEWfKkc5cL8gmoaCQsrSSF 0iySB0mFlRUL4wXhjMZA5bDefTBUdRNlok5hw8Wo1uqm6xxDi92cfsknTiRusvO7Tt5F rhI5bHvhLEUe06QrsZZrshxlp9Et9i9eYl2vgNCD1qaIpKS4qWmGFaBkhtR4CFCE9QrR baOQCh+UtKloO1QWNFPbYJvkXEzZltJ+4b69yPFWgpJi2MSUVksDrNLeFCPUeF4p6kw8 v3Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=d1fTJqPqwH1w/qQ/4WFyr762/U70g5oYLAiA1f/J100=; b=EtdqFY6fL6SfAumB/JolXe5ZgjgMahU91uKuBVBZw+wTXvvZwCJwNnNDDYDxicLMAF oLhYAK8q1OQ/m/xQ8cvg1cglnG2UUswc2E+CRGatUTf+zFAIbvegX1CBrJ8YRtq1OJJP rT84KO3ceqMvVdOJlcIS+DdWIQ8Ck7fNnXOOdcR+PmNoC/RUikPCROvk/O7lELhlbRoh iCUghMJj0jp8IuJGyzfGHx2tHF9OkvItKlSYeO7PkMdOJFMqebHeIZ4ddo8M+w8U6js8 696ncauCMC3LaV519JrdBE30QNwQboKIiNvMv71vVZCjWmb8KIbItG7eqfiSVzoHNTbZ ahZQ== X-Gm-Message-State: AOAM530YCui5mx1QTKO93Ut4wb4K5qDM0zl+ighpdzwCxgErkHjeu0BA ZB4nHDyA5VT7vsKqLRR5+ds= X-Received: by 2002:a19:c20c:: with SMTP id l12mr333142lfc.296.1626973478113; Thu, 22 Jul 2021 10:04:38 -0700 (PDT) Received: from mobilestation ([95.79.127.110]) by smtp.gmail.com with ESMTPSA id o10sm2035236lfi.41.2021.07.22.10.04.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jul 2021 10:04:37 -0700 (PDT) Date: Thu, 22 Jul 2021 20:04:35 +0300 From: Serge Semin To: nandhini.srikandan@intel.com Cc: broonie@kernel.org, robh+dt@kernel.org, linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, mgross@linux.intel.com, kris.pan@intel.com, kenchappa.demakkanavar@intel.com, furong.zhou@intel.com, mallikarjunappa.sangannavar@intel.com, mahesh.r.vaidya@intel.com, rashmi.a@intel.com Subject: Re: =?utf-8?B?W+KAnFBBVENI?= =?utf-8?B?4oCd?= 2/2] spi: dw: Add support for Intel Thunder Bay SPI Message-ID: <20210722170435.y6fla7ixfgzwkje2@mobilestation> References: <20210722053358.29682-1-nandhini.srikandan@intel.com> <20210722053358.29682-3-nandhini.srikandan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210722053358.29682-3-nandhini.srikandan@intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 22, 2021 at 01:33:58PM +0800, nandhini.srikandan@intel.com wrote: > From: Nandhini Srikandan > > Add support for Intel Thunder Bay SPI controller, which uses DesignWare > DWC_ssi core. > Bit 31 of CTRLR0 register is added for Thunder Bay, to > configure the device as a master or as a slave serial peripheral. > Bit 14(SSTE) of CTRLR0 register should be set(1) for Thunder Bay. Could you elaborate what this bit mean? > Added reset of SPI controller required for Thunder Bay. If it's really required (is it?) then you were supposed to reflect that in the code by returning a negative error if the driver fails to retrieve the reset control handler. In accordance with that the bindings should have been also updated so the dtbs_check procedure would make sure the Thunder Bay SPI DT-node comply to the requirements in that matter. Anyway I've got a few comments regarding this part of your patch. Please see them below. > > Signed-off-by: Nandhini Srikandan > --- > drivers/spi/spi-dw-core.c | 6 ++++++ > drivers/spi/spi-dw-mmio.c | 20 ++++++++++++++++++++ > drivers/spi/spi-dw.h | 15 +++++++++++++++ > 3 files changed, 41 insertions(+) > > diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c > index a305074c482e..eecf8dcd0677 100644 > --- a/drivers/spi/spi-dw-core.c > +++ b/drivers/spi/spi-dw-core.c > @@ -302,6 +302,12 @@ static u32 dw_spi_prepare_cr0(struct dw_spi *dws, struct spi_device *spi) > > if (dws->caps & DW_SPI_CAP_KEEMBAY_MST) > cr0 |= DWC_SSI_CTRLR0_KEEMBAY_MST; > + > + if (dws->caps & DW_SPI_CAP_THUNDERBAY_MST) > + cr0 |= DWC_SSI_CTRLR0_THUNDERBAY_MST; I guess that KeemBay and ThunderBay SPI controllers have been synthesized based on the same IP-core with a few differences. Is that true? Could you tell us what is the difference between them? Anyway regarding this the Master/Slave part. Is the ThunderBay implementation of the Master/Slave capability the same as it was embedded in the KeemBay controller? If so then what do you think about just renaming DW_SPI_CAP_KEEMBAY_MST to something like DW_SPI_CAP_INTEL_MST and using it then for both Keembay and ThunderBay versions of the SPI-controllers? (The similar renaming needs to be provided for the DWC_SSI_CTRLR0_KEEMBAY_MST macro then.) You can implement it as a preparation patch posted before this one in the series. > + > + if (dws->caps & DW_SPI_CAP_THUNDERBAY_SSTE) > + cr0 |= DWC_SSI_CTRLR0_THUNDERBAY_SSTE; Similar question regarding the SSTE bit. Is it something ThunderBay specific only? Was the corresponding functionality embedded into the KeemBay or any other Intel version of the DW SPI controller? > } > > return cr0; > diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c > index 3379720cfcb8..ca9aad078752 100644 > --- a/drivers/spi/spi-dw-mmio.c > +++ b/drivers/spi/spi-dw-mmio.c > @@ -222,6 +222,15 @@ static int dw_spi_keembay_init(struct platform_device *pdev, > return 0; > } > > +static int dw_spi_thunderbay_init(struct platform_device *pdev, > + struct dw_spi_mmio *dwsmmio) > +{ > + dwsmmio->dws.caps = DW_SPI_CAP_THUNDERBAY_MST | DW_SPI_CAP_THUNDERBAY_RST | > + DW_SPI_CAP_THUNDERBAY_SSTE | DW_SPI_CAP_DWC_SSI; > + Originally the DW_SPI_CAP-functionality was provided to modify the DW SPI core driver behavior when it was required. For instance it was mostly connected with the platform-specific CR0-register configurations. So as I see it the reset part can be successfully handled fully in the framework of the MMIO-platform glue-driver. Instead of defining a new capability you could have just added the next code in the ThunderBay init-method: + if (!dwsmmio->rstc) { + dev_err(&pdev->dev, "Reset control is missing\n"); + return -EINVAL; + } + + reset_control_assert(dwsmmio->rstc); + udelay(2); + reset_control_deassert(dwsmmio->rstc); + Thus you'd reuse the already implemented reset-controller handler defined in the dw_spi_mmio structure with no need of implementing a new capability. > + return 0; > +} > + > static int dw_spi_canaan_k210_init(struct platform_device *pdev, > struct dw_spi_mmio *dwsmmio) > { > @@ -243,6 +252,7 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) > struct dw_spi_mmio *dwsmmio); > struct dw_spi_mmio *dwsmmio; > struct resource *mem; > + struct reset_control *rst; > struct dw_spi *dws; > int ret; > int num_cs; > @@ -309,6 +319,15 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) > goto out; > } > > + if (dws->caps & DW_SPI_CAP_THUNDERBAY_RST) { > + rst = devm_reset_control_get_exclusive(&pdev->dev, NULL); > + if (!IS_ERR(rst)) { > + reset_control_assert(rst); > + udelay(2); > + reset_control_deassert(rst); > + } > + } > + Please see my comment above. We don't need to have this code here if you get to implement what I suggest there. > pm_runtime_enable(&pdev->dev); > > ret = dw_spi_add_host(&pdev->dev, dws); > @@ -349,6 +368,7 @@ static const struct of_device_id dw_spi_mmio_of_match[] = { > { .compatible = "renesas,rzn1-spi", .data = dw_spi_dw_apb_init}, > { .compatible = "snps,dwc-ssi-1.01a", .data = dw_spi_dwc_ssi_init}, > { .compatible = "intel,keembay-ssi", .data = dw_spi_keembay_init}, > + { .compatible = "intel,thunderbay-ssi", .data = dw_spi_thunderbay_init}, > { .compatible = "microchip,sparx5-spi", dw_spi_mscc_sparx5_init}, > { .compatible = "canaan,k210-spi", dw_spi_canaan_k210_init}, > { /* end of table */} > diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h > index b665e040862c..bfe1d5edc25a 100644 > --- a/drivers/spi/spi-dw.h > +++ b/drivers/spi/spi-dw.h > @@ -82,6 +82,18 @@ > */ > #define DWC_SSI_CTRLR0_KEEMBAY_MST BIT(31) > > +/* > + * For Thunder Bay, CTRLR0[14] should be set to 1. > + */ Could you provide a bit more details what this bit has been implemented for? > +#define DWC_SSI_CTRLR0_THUNDERBAY_SSTE BIT(14) > + > +/* > + * For Thunder Bay, CTRLR0[31] is used to select controller mode. > + * 0: SSI is slave > + * 1: SSI is master > + */ > +#define DWC_SSI_CTRLR0_THUNDERBAY_MST BIT(31) Please see my suggestion regarding the Master/Slave capability in one of the comments above. Regards -Serge > + > /* Bit fields in CTRLR1 */ > #define SPI_NDF_MASK GENMASK(15, 0) > > @@ -125,6 +137,9 @@ enum dw_ssi_type { > #define DW_SPI_CAP_KEEMBAY_MST BIT(1) > #define DW_SPI_CAP_DWC_SSI BIT(2) > #define DW_SPI_CAP_DFS32 BIT(3) > +#define DW_SPI_CAP_THUNDERBAY_MST BIT(4) > +#define DW_SPI_CAP_THUNDERBAY_RST BIT(5) > +#define DW_SPI_CAP_THUNDERBAY_SSTE BIT(6) > > /* Slave spi_transfer/spi_mem_op related */ > struct dw_spi_cfg { > -- > 2.17.1 >