From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754856AbbI3I6o (ORCPT ); Wed, 30 Sep 2015 04:58:44 -0400 Received: from mail-by2on0118.outbound.protection.outlook.com ([207.46.100.118]:31123 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754778AbbI3I6W (ORCPT ); Wed, 30 Sep 2015 04:58:22 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; mentor.com; dkim=none (message not signed) header.d=none;mentor.com; dmarc=none action=none header.from=freescale.com; Date: Wed, 30 Sep 2015 16:42:20 +0800 From: Robin Gong To: Anton Bondarenko CC: , , , , , , Subject: Re: [PATCH v2 5/8] spi: imx: Add support for loopback for ECSPI controllers Message-ID: <20150930084219.GE2709@shlinux2> References: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD029;1:zvmbZ87P20F2JPlUQiZVxqQBY3yI0hQGG9fUrCto+TSTIGwVihcuvJegIZH1rLnpr9ckrhBRUYUcUtffhGKmdF3LL4bChm/SQKn7pHvYy7Pi5wTBDF7M3vy5KaG01mYBK9cawt5Xly2jwli5B80Eh4GAS33mICPLVJjimPMH7PVFrm52nAj7rmmMWFADU5C/jcfhdLO86hWm/s8rqgGxQKfjLxK9MUIC/eZj/L6pns3MtnYag6OBMolwv2CZZWYUacXhi3jLkv7wDRAakanKyAQjphBNs8NuC4y5/8VyvEUrkMiRuWDQEdDnYNxOKDUvIGvQgrDjC6wghaLYOdjZjg== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(24454002)(199003)(46406003)(104016004)(46102003)(106466001)(105606002)(19580395003)(19580405001)(97756001)(6806005)(83506001)(77096005)(33716001)(23726002)(68736005)(50466002)(85426001)(87936001)(54356999)(50986999)(76176999)(33656002)(62966003)(47776003)(64706001)(77156002)(11100500001)(2950100001)(5001920100001)(189998001)(92566002)(5007970100001)(110136002)(5001960100002)(5008740100001)(4001540100001)(97736004)(5001860100001)(81156007)(4001350100001)(5001830100001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB488;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB488;2:9jZGAN2KalRGtCyTLvYyArxlMQokbwml5hbjQTHh8Cmax+9cHGPyW4dknliCYcQAmTRQ4GzTx8a/7dMkrB0MZK0aAUeRy4i+c8+o68Ht3rmvYNCiIhGtyYjOvN9UfUqhu7t40JuCtGtb8eCYcZ1vj3l6XnT8EznM+k+zparqljw=;3:WQ4AiN+KrkDxdzS0qeyHC93pQ4L2LsVCCBZa5xygCoWrCrlzKg19LklJgRHzbnxJJg7MiQPNZEAX5S6W/0D6CvfwkN9lj+UxabZ1CeCNVDjgT+73NISqnOeVfgwzDzcVFj+2ckJbCHeEl1qFcp7qAStQBKxW6Vw5CvayGT3FGCk2h7jOD3hfegmwWgulns3NNeSljiTlmqFwWbundKL+LM/gSfWhjLfad3cmufUBPt8=;25:OLOhf6lwlLpttN2IlPMq6RfGEiLpZwwz1nE/cfEBnPtzApFNcxkyXCMLDyGvejtrVS6eMfE8N0ISG08q2Qd4NckeGa9CRma6n1CRvlP2GYAITWNwsA233tPwvQJ4/NBuEFUY3nxN3JXOBmT091D/zdysJhqt2YGAVgzgEwhUDUrrmBGaAavDDIyPy/wF7jAw/TMsLYWfuqXVPrwfTsAYUef3sYV/2NoRCEQydah75bwZ3JZiSMM4M8dBGu82f5MUL7gpDdJSMRkT3Ix9E+BDyg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB488; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB488;20:Oo79a+GSeq2/VUnOFNr5iyT1WSybcNHfXms0sS+f2THQtqdbSoBAV/g2Zew+NYBs8ncuC2GxqEn/JcdygOPqoKyhFnndK9satl/m0jVAe1XwfRDpYj78JwD0jdKbTgnv0FQqA9Cw40I4r8J1vkydlH2BKvgEhZJnGakF+fm5qs7DD0L6xf4LHiUq1iIp21aNXRvSjUoK+IxtklZTv89DkpbkAwvXXP8dK3+AA0J/LSCSTC9lKbeOIDgny2PEFZsEXQbSW5a9ihb+PRrTcuhQttUAMWXA98unWMHYFAUYYq94dtdXd+3GXzic0aCNXuOGhtkOIpXnpbP5VColh9MXN5HOUs4cG53puViR8cJzFHo=;4:wkYOWZ6vE6V6ehEcBDh2IyuyEPsVWtdHZgp74LiftqKqGq6d8G0F1iF3kzXkEIC+4Hox+mQ/yVzGBCKrthimtjkz09FrKHw19/H9ojfJd3PljRiVf5DqaqCPAW/g2N7S4K5+quwNU4cyKJLEP3l/iuWazEByltYtYh3B2RGLpl846Bb5Gd5hfT0UUjaOh5l8amjL4QDwobcmfIbwx0H+ou+FzCKDVfLIUjeZ15V17FoZU/9X09Es2XxDYHuF0T4pF/EQ2IJWDLCjxhC1vtoT/mcPMLXmXuOrD1kFoh80tNYuDYRUWilKKr6TXbVvGE3jQyDHC4I/X2Xv+8jjoKMZDpaj3ysfecEZfRZdR7wMwAY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001);SRVR:BLUPR03MB488;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB488; X-Forefront-PRVS: 071518EF63 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB488;23:Xrm+24Y+fc4oqwvSI4yv+58FNqRCxj18yjpdgJU+YV?= =?us-ascii?Q?olLoEOd7QpVQ5cpqfW0Wfm3sUft2WkwrQxWvsVwx1B2Uio1R3Zse9StXyzyk?= =?us-ascii?Q?SNbMJR2kCY+0rUQD4bn9uFtJvAjpjdsGmfbbTl6CRr8YsTnmPTAX3NWko5oH?= =?us-ascii?Q?Nm50QbaX7Vy1vypKAAM+j3LCObB7InZ1X6PHKjz7cYoyVMUF9QdynwvlrwQz?= =?us-ascii?Q?t6T9zV9ENMEFhO3KpyXSw2aAk8f3BljEcKxLBl6iN98klL+0oeo3qRO5ZtMd?= =?us-ascii?Q?DNcdaLjpUgIOgIgJQWnSGmQtcgZbnxH3F0FA8tb1BOm9XS/a3tsKLX3OjCaw?= =?us-ascii?Q?l36p/Wn4oATwNDIqa2llX+ygaiLx0O+64tgl52PIkgY32CzYBeTtNPTpRBIO?= =?us-ascii?Q?nJCLC5Phbe0vpjLtxOpB4ma3s3+/Vk8PbWh3pHFtxFmDeFDEaRKqETm+lM24?= =?us-ascii?Q?fUjyvIhOtctv7BErrb9mq9ErRmHykFhAsMm/kztsVyRt3p2rI7ADnS8/rZu1?= =?us-ascii?Q?Zb/A4lh1NF8KLQgF/fl7ZR8LCLbP+tkMNkfc/Nm3poRyolk7+F9z2B0ZADVY?= =?us-ascii?Q?eHf+3ElFfGPCsboQIsrGlCHhN4403KWw2wuSwgA8oDl/Z/r51CQHTY4c3YJq?= =?us-ascii?Q?EMHtzDdNgCcHKdX4MsW8S3vxF3h0UXKja4Nml616QykQYzAmIdWOeDMOyCRY?= =?us-ascii?Q?rCglefIwo5G1WPO53unhTFHsa7X91Hyc+EKbc505cea9T9nytv7r3mFeMPyO?= =?us-ascii?Q?obG7xMOPKSWi2659cwuUm4BucpybpB/hMOPoB5Txbv8VOC9rqG2bp481v38N?= =?us-ascii?Q?fUJ5Hwsg7WgSRBLm0QQInzEcOyY9CA1bBcm9cZkM96P9YnwGqrd49zOU9oTq?= =?us-ascii?Q?ijjg6cr7lrArko6ZgW+zbxfLu18reVEVS1VSK5bXO9uNcHEfehC10SQ1lzHS?= =?us-ascii?Q?rpdU1k+5FfCJjjU9wPaV/ui7MFS3Dc7scjXFr53zGLMctylpviPYkv2r8JQ+?= =?us-ascii?Q?Xem3OW8E214Ni5+WqSl4ynrv3wCGrnqFMtA2tkU/R9kUBAo3zbAoIJSt41DL?= =?us-ascii?Q?6LGVR8Z4FFsCRgLeL/DqfKsMBEdoo76/HeM41TEtY2GdNGe8butm78t+dp24?= =?us-ascii?Q?RrjtZKn2RXktwftbF19szRfx0CSHfoLl1LvaH8L0xwXr9uzxDYjr29sP77GQ?= =?us-ascii?Q?GjEbObX4QbDOP2zLsL+JXWHWQ0LKcaTHVihO2eV4ebHfS5cNesFvHhJwIbol?= =?us-ascii?Q?88NwZH93p3DfAKF4/bfTXt8wC2wCkq9Btz/E0+/cj15mZ2hgccTtmfOlhznm?= =?us-ascii?Q?FJsNzQ/bWAWzCzhTi/cGk=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB488;5:dKiadxVmD+jAK6JivbEV7iGY/bApcCkg3ZTPg38kpAS5GQ8kwX7HfledAvk8El1DEad6IS4Q3nFmfXeh7mPJw7sIrHBlmMxVhJn1ho5r13a8GtFn9mtD2N2kwaOv60N4kFIfdPrPsJx+qQpD54AksQ==;24:K/y5QDzksQ8f5F5GSWeW+icFlOTcjr7dVOWoHElVfZObe97Epx39/XiLsJnT/0vssp/RQyaHVb62Wz0KjUbdrlwXWy8mbi7pJts8E2JifB8=;20:9i3bGrX5t6JomT9f4h68ubHax9lfwFfuKN6DyZUzF2RIG/1fa9s+5z8h9+T9fiBmKRWQAr9Oy/mep08N6rr5uw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2015 08:42:52.6942 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB488 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 25, 2015 at 07:57:12PM +0200, Anton Bondarenko wrote: > Support for ECSPI loopback for IMX51,IMX53 and IMX6Q using TEST register. > > Signed-off-by: Mohsin Kazmi > Signed-off-by: Anton Bondarenko > --- > drivers/spi/spi-imx.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c > index 41c9cef..4b3c16e 100644 > --- a/drivers/spi/spi-imx.c > +++ b/drivers/spi/spi-imx.c > @@ -265,6 +265,9 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi, > #define MX51_ECSPI_STAT 0x18 > #define MX51_ECSPI_STAT_RR (1 << 3) > > +#define MX51_ECSPI_TEST 0x20 > +#define MX51_ECSPI_LOOP BIT(31) > + > /* MX51 eCSPI */ > static unsigned int mx51_ecspi_clkdiv(unsigned int fin, unsigned int fspi, > unsigned int *fres) > @@ -338,6 +341,7 @@ static int __maybe_unused mx51_ecspi_config(struct spi_imx_data *spi_imx, > u32 ctrl = MX51_ECSPI_CTRL_ENABLE, dma = 0; > u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG); > u32 delay; > + u32 lpb = 0; > > /* > * The hardware seems to have a race condition when changing modes. The > @@ -370,8 +374,12 @@ static int __maybe_unused mx51_ecspi_config(struct spi_imx_data *spi_imx, > if (config->mode & SPI_CS_HIGH) > cfg |= MX51_ECSPI_CONFIG_SSBPOL(config->cs); > > + if (config->mode & SPI_LOOP) > + lpb |= MX51_ECSPI_LOOP; > + > writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL); > writel(cfg, spi_imx->base + MX51_ECSPI_CONFIG); > + writel(lpb, spi_imx->base + MX51_ECSPI_TEST); It's better write this MX51_ECSPI_TEST only in LOOP mode. > > /* > * Wait until the changes in the configuration register CONFIGREG > @@ -1252,6 +1260,9 @@ static int spi_imx_probe(struct platform_device *pdev) > spi_imx = spi_master_get_devdata(master); > spi_imx->bitbang.master = master; > > + spi_imx->devtype_data = of_id ? of_id->data : > + (struct spi_imx_devtype_data *)pdev->id_entry->driver_data; > + > for (i = 0; i < master->num_chipselect; i++) { > int cs_gpio = of_get_named_gpio(np, "cs-gpios", i); > if (!gpio_is_valid(cs_gpio) && mxc_platform_info) > @@ -1276,12 +1287,13 @@ static int spi_imx_probe(struct platform_device *pdev) > spi_imx->bitbang.master->cleanup = spi_imx_cleanup; > spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message; > spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message; > - spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; > + spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | > + SPI_CS_HIGH; Any change? > > - init_completion(&spi_imx->xfer_done); > + if (is_imx5x_ecspi(spi_imx)) > + spi_imx->bitbang.master->mode_bits |= SPI_LOOP; > > - spi_imx->devtype_data = of_id ? of_id->data : > - (struct spi_imx_devtype_data *) pdev->id_entry->driver_data; > + init_completion(&spi_imx->xfer_done); > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > spi_imx->base = devm_ioremap_resource(&pdev->dev, res); > -- > 2.5.2 >