From patchwork Tue Dec 22 18:03:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Sperl X-Patchwork-Id: 7906211 Return-Path: X-Original-To: patchwork-linux-spi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 56815BEEED for ; Tue, 22 Dec 2015 18:03:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 64DD32054D for ; Tue, 22 Dec 2015 18:03:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 558CB2058E for ; Tue, 22 Dec 2015 18:03:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755016AbbLVSDm (ORCPT ); Tue, 22 Dec 2015 13:03:42 -0500 Received: from 212-186-180-163.dynamic.surfer.at ([212.186.180.163]:40208 "EHLO cgate.sperl.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755002AbbLVSDl (ORCPT ); Tue, 22 Dec 2015 13:03:41 -0500 Received: from raspcm.intern.sperl.org (account martin@sperl.org [10.10.10.41] verified) by sperl.org (CommuniGate Pro SMTP 6.1.2) with ESMTPSA id 6390437; Tue, 22 Dec 2015 18:03:34 +0000 From: kernel@martin.sperl.org To: Mark Brown , linux-spi@vger.kernel.org Cc: Martin Sperl Subject: [PATCH v3 4/8] spi: loopback-test: move to use spi_message_dump_data Date: Tue, 22 Dec 2015 18:03:24 +0000 Message-Id: <1450807408-2422-5-git-send-email-kernel@martin.sperl.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1450807408-2422-1-git-send-email-kernel@martin.sperl.org> References: <1450807408-2422-1-git-send-email-kernel@martin.sperl.org> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Martin Sperl Move loopback-test to use the core spi_message_dump_data method. A piece of functionality (testing for UNWRITTEN guard pattern) that was inside spi_test_dump_transfer had to get moved out to keep the functionality working. Signed-off-by: Martin Sperl --- drivers/spi/spi-loopback-test.c | 116 +++++++++++++-------------------------- 1 file changed, 39 insertions(+), 77 deletions(-) diff --git a/drivers/spi/spi-loopback-test.c b/drivers/spi/spi-loopback-test.c index 81fa906..75cea07 100644 --- a/drivers/spi/spi-loopback-test.c +++ b/drivers/spi/spi-loopback-test.c @@ -331,74 +331,6 @@ MODULE_LICENSE("GPL"); /* we allocate one page more, to allow for offsets */ #define SPI_TEST_MAX_SIZE_PLUS (SPI_TEST_MAX_SIZE + PAGE_SIZE) -static void spi_test_print_hex_dump(char *pre, const void *ptr, size_t len) -{ - /* limit the hex_dump */ - if (len < 1024) { - print_hex_dump(KERN_INFO, pre, - DUMP_PREFIX_OFFSET, 16, 1, - ptr, len, 0); - return; - } - /* print head */ - print_hex_dump(KERN_INFO, pre, - DUMP_PREFIX_OFFSET, 16, 1, - ptr, 512, 0); - /* print tail */ - pr_info("%s truncated - continuing at offset %04zx\n", - pre, len - 512); - print_hex_dump(KERN_INFO, pre, - DUMP_PREFIX_OFFSET, 16, 1, - ptr + (len - 512), 512, 0); -} - -static void spi_test_dump_message(struct spi_device *spi, - struct spi_message *msg, - bool dump_data) -{ - struct spi_transfer *xfer; - int i; - u8 b; - - dev_info(&spi->dev, " spi_msg@%pK\n", msg); - if (msg->status) - dev_info(&spi->dev, " status: %i\n", - msg->status); - dev_info(&spi->dev, " frame_length: %i\n", - msg->frame_length); - dev_info(&spi->dev, " actual_length: %i\n", - msg->actual_length); - - list_for_each_entry(xfer, &msg->transfers, transfer_list) { - dev_info(&spi->dev, " spi_transfer@%pK\n", xfer); - dev_info(&spi->dev, " len: %i\n", xfer->len); - dev_info(&spi->dev, " tx_buf: %pK\n", xfer->tx_buf); - if (dump_data && xfer->tx_buf) - spi_test_print_hex_dump(" TX: ", - xfer->tx_buf, - xfer->len); - - dev_info(&spi->dev, " rx_buf: %pK\n", xfer->rx_buf); - if (dump_data && xfer->rx_buf) - spi_test_print_hex_dump(" RX: ", - xfer->rx_buf, - xfer->len); - /* check for unwritten test pattern on rx_buf */ - if (xfer->rx_buf) { - for (i = 0 ; i < xfer->len ; i++) { - b = ((u8 *)xfer->rx_buf)[xfer->len - 1 - i]; - if (b != SPI_TEST_PATTERN_UNWRITTEN) - break; - } - if (i) - dev_info(&spi->dev, - " rx_buf filled with %02x starts at offset: %i\n", - SPI_TEST_PATTERN_UNWRITTEN, - xfer->len - i); - } - } -} - struct rx_ranges { struct list_head list; u8 *start; @@ -423,17 +355,37 @@ static int spi_check_rx_ranges(struct spi_device *spi, { struct spi_transfer *xfer; struct rx_ranges ranges[SPI_TEST_MAX_TRANSFERS], *r; - int i = 0; + size_t i = 0; LIST_HEAD(ranges_list); - u8 *addr; + u8 *addr, b; int ret = 0; - /* loop over all transfers to fill in the rx_ranges */ + /* if there is no rx, then no check is needed */ list_for_each_entry(xfer, &msg->transfers, transfer_list) { - /* if there is no rx, then no check is needed */ if (!xfer->rx_buf) continue; - /* fill in the rx_range */ + /* check the unwritten pattern inside the transfer*/ + for (i = 0; i < xfer->len ; i++) { + b = ((u8 *)xfer->rx_buf)[xfer->len - 1 - i]; + if (b != SPI_TEST_PATTERN_UNWRITTEN) + break; + } + /* if there is a match then return with an error + * note that the fill pattern makes sure that the last + * TX byte per transfer is never the UNWRITTEN test pattern + */ + if (i) { + dev_err(&spi->dev, + " rx_buf filled with %02x starts at offset: %i\n", + SPI_TEST_PATTERN_UNWRITTEN, + xfer->len - i); + return -EINVAL; + } + } + + /* loop over all transfers to fill in the rx_ranges */ + list_for_each_entry(xfer, &msg->transfers, transfer_list) { + /* fill in the rx_range for the check below*/ if (RANGE_CHECK(xfer->rx_buf, xfer->len, rx, SPI_TEST_MAX_SIZE_PLUS)) { ranges[i].start = xfer->rx_buf; @@ -653,6 +605,12 @@ static int spi_test_fill_pattern(struct spi_device *spi, return -EINVAL; } } + /* make sure that the last byte in TX is + * not the UNWRITTEN pattern + */ + tx_buf--; + if (*tx_buf == SPI_TEST_PATTERN_UNWRITTEN) + *tx_buf = 0; } return 0; @@ -812,6 +770,7 @@ static int spi_test_run_iter(struct spi_device *spi, int spi_test_execute_msg(struct spi_device *spi, struct spi_test *test, void *tx, void *rx) { + const size_t dump_size = 512; struct spi_message *msg = &test->msg; int ret = 0; int i; @@ -820,7 +779,7 @@ int spi_test_execute_msg(struct spi_device *spi, struct spi_test *test, if (!simulate_only) { /* dump the complete message before and after the transfer */ if (dump_messages == 3) - spi_test_dump_message(spi, msg, true); + spi_message_dump(spi, msg, dump_size, dump_size); /* run spi message */ ret = spi_sync(spi, msg); @@ -855,9 +814,12 @@ int spi_test_execute_msg(struct spi_device *spi, struct spi_test *test, /* if requested or on error dump message (including data) */ exit: - if (dump_messages || ret) - spi_test_dump_message(spi, msg, - (dump_messages >= 2) || (ret)); + if (dump_messages || ret) { + if ((dump_messages >= 2) || (ret)) + spi_message_dump(spi, msg, dump_size, dump_size); + else + spi_message_dump(spi, msg, 0, 0); + } return ret; }