From patchwork Mon Jun 28 12:59:55 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 108374 X-Patchwork-Delegate: grant.likely@secretlab.ca Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o5SD0OZx021675 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 28 Jun 2010 13:01:00 GMT Received: from localhost ([127.0.0.1] helo=sfs-ml-2.v29.ch3.sourceforge.com) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1OTDwl-0003Wc-O4; Mon, 28 Jun 2010 13:00:23 +0000 Received: from sfi-mx-3.v28.ch3.sourceforge.com ([172.29.28.123] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1OTDwk-0003WS-Kk for spi-devel-general@lists.sourceforge.net; Mon, 28 Jun 2010 13:00:22 +0000 Received-SPF: pass (sfi-mx-3.v28.ch3.sourceforge.com: domain of gmail.com designates 74.125.83.175 as permitted sender) client-ip=74.125.83.175; envelope-from=jason77.wang@gmail.com; helo=mail-pv0-f175.google.com; Received: from mail-pv0-f175.google.com ([74.125.83.175]) by sfi-mx-3.v28.ch3.sourceforge.com with esmtp (Exim 4.69) id 1OTDwg-0002U9-LA for spi-devel-general@lists.sourceforge.net; Mon, 28 Jun 2010 13:00:22 +0000 Received: by pvg13 with SMTP id 13so977296pvg.34 for ; Mon, 28 Jun 2010 06:00:13 -0700 (PDT) Received: by 10.142.250.42 with SMTP id x42mr3540544wfh.311.1277730012767; Mon, 28 Jun 2010 06:00:12 -0700 (PDT) Received: from [192.168.0.183] ([180.77.201.84]) by mx.google.com with ESMTPS id y15sm8128918wfd.10.2010.06.28.06.00.05 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 28 Jun 2010 06:00:12 -0700 (PDT) Message-ID: <4C289CCB.7010409@gmail.com> Date: Mon, 28 Jun 2010 20:59:55 +0800 From: jason User-Agent: Thunderbird 2.0.0.24 (X11/20100317) MIME-Version: 1.0 To: roman.tereshonkov@nokia.com References: <1277381565-6305-1-git-send-email-jason77.wang@gmail.com> <4C24A182.4060009@gmail.com> In-Reply-To: X-Spam-Score: -0.8 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain -0.0 SPF_PASS SPF: sender matches SPF record -0.0 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.0 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.7 AWL AWL: From: address is in the auto white-list X-Headers-End: 1OTDwg-0002U9-LA Cc: david-b@pacbell.net, linux-arm-kernel@lists.infradead.org, spi-devel-general@lists.sourceforge.net Subject: Re: [spi-devel-general] [PATCH] spi/omap2_mcspi: disable and enable chan between each SPI transfer X-BeenThere: spi-devel-general@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: Linux SPI core/device drivers discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces@lists.sourceforge.net X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Mon, 28 Jun 2010 13:01:01 +0000 (UTC) =====SPI MESSAGE BEGIN===== tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 *****SPI MESSAGE END***** Subject: [PATCH] SPI/test1: get rx_data in RX_ONLY transfer before trigger writing get rx_data in RX_ONLY transfer before trigger writing dummy data to TX register. Signed-off-by: Jason Wang --- drivers/spi/omap2_mcspi.c | 19 ++++++++++++++----- 1 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index b3a94ca..ddfe4b0 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -893,7 +893,7 @@ static void omap2_mcspi_work(struct work_struct *work) spi = m->spi; cs = spi->controller_state; cd = spi->controller_data; - + printk("=====SPI MESSAGE BEGIN=====\n"); omap2_mcspi_set_enable(spi, 1); list_for_each_entry(t, &m->transfers, transfer_list) { if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { @@ -928,17 +928,26 @@ static void omap2_mcspi_work(struct work_struct *work) if (t->len > ((cs->word_len + 7) >> 3)) chconf |= OMAP2_MCSPI_CHCONF_TURBO; } - + printk("tansfer%s: conf=%x, data=%x\n", t->tx_buf ? "TX" : "RX", + chconf, t->tx_buf ? *(u8 *)(t->tx_buf) : 0); mcspi_write_chconf0(spi, chconf); if (t->len) { unsigned count; /* RX_ONLY mode needs dummy data in TX reg */ - if (t->tx_buf == NULL) + if (t->tx_buf == NULL) { + u8 rx_data; + if (mcspi_wait_for_reg_bit(cs->base + OMAP2_MCSPI_CHSTAT0, + OMAP2_MCSPI_CHSTAT_RXS) < 0) + dev_err(&spi->dev, "RXS timed out\n"); + + rx_data = __raw_readl(cs->base + OMAP2_MCSPI_RX0); + printk("rx_data = %x\n", rx_data); + __raw_writel(0, cs->base + OMAP2_MCSPI_TX0); - + } if (m->is_dma_mapped || t->len >= DMA_MIN_BYTES) count = omap2_mcspi_txrx_dma(spi, t); else @@ -971,7 +980,7 @@ static void omap2_mcspi_work(struct work_struct *work) omap2_mcspi_force_cs(spi, 0); omap2_mcspi_set_enable(spi, 0); - + printk("*****SPI MESSAGE END*****\n"); m->status = status; m->complete(m->context); -- 1.5.6.5 Test2 result output & patch: # =====SPI MESSAGE BEGIN===== tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 *****SPI MESSAGE END***** =====SPI MESSAGE BEGIN===== tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = f0 *****SPI MESSAGE END***** Subject: [PATCH] SPI/test2: get rx_data in RX_ONLY transfer after trigger writing get rx_data in RX_ONLY transfer after trigger writing dummy data to TX register. Signed-off-by: Jason Wang --- drivers/spi/omap2_mcspi.c | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index b3a94ca..96c508a 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -893,7 +893,7 @@ static void omap2_mcspi_work(struct work_struct *work) spi = m->spi; cs = spi->controller_state; cd = spi->controller_data; - + printk("=====SPI MESSAGE BEGIN=====\n"); omap2_mcspi_set_enable(spi, 1); list_for_each_entry(t, &m->transfers, transfer_list) { if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { @@ -928,17 +928,27 @@ static void omap2_mcspi_work(struct work_struct *work) if (t->len > ((cs->word_len + 7) >> 3)) chconf |= OMAP2_MCSPI_CHCONF_TURBO; } - + printk("tansfer%s: conf=%x, data=%x\n", t->tx_buf ? "TX" : "RX", + chconf, t->tx_buf ? *(u8 *)(t->tx_buf) : 0); mcspi_write_chconf0(spi, chconf); if (t->len) { unsigned count; /* RX_ONLY mode needs dummy data in TX reg */ - if (t->tx_buf == NULL) + if (t->tx_buf == NULL) { + u8 rx_data; __raw_writel(0, cs->base + OMAP2_MCSPI_TX0); + if (mcspi_wait_for_reg_bit(cs->base + OMAP2_MCSPI_CHSTAT0, + OMAP2_MCSPI_CHSTAT_RXS) < 0) + dev_err(&spi->dev, "RXS timed out\n"); + + rx_data = __raw_readl(cs->base + OMAP2_MCSPI_RX0); + printk("rx_data = %x\n", rx_data); + + } if (m->is_dma_mapped || t->len >= DMA_MIN_BYTES) count = omap2_mcspi_txrx_dma(spi, t); else @@ -971,7 +981,7 @@ static void omap2_mcspi_work(struct work_struct *work) omap2_mcspi_force_cs(spi, 0); omap2_mcspi_set_enable(spi, 0); - + printk("*****SPI MESSAGE END*****\n"); m->status = status; m->complete(m->context); -- 1.5.6.5 Test3 result output & patch: # =====SPI MESSAGE BEGIN===== tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = 77 tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = 76 *****SPI MESSAGE END***** =====SPI MESSAGE BEGIN===== tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = 75 tansferTX: conf=1123d4, data=93 tansferRX: conf=1113d4, data=0 rx_data = 74 *****SPI MESSAGE END***** Subject: [PATCH] SPI/test3: get rx_data in RX_ONLY transfer after trigger writing At frist revert the commit a330ce2 "omap2_mcspi: Flush posted writes", then get rx_data in RX_ONLY transfer after trigger writing dummy data to TX register. Signed-off-by: Jason Wang --- drivers/spi/omap2_mcspi.c | 19 ++++++++++++++----- 1 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index b3a94ca..5d71cad 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -204,7 +204,6 @@ static inline void mcspi_write_chconf0(const struct spi_device *spi, u32 val) cs->chconf0 = val; mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, val); - mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0); }