From patchwork Sat Jan 6 18:17:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Rush X-Patchwork-Id: 856432 X-Patchwork-Delegate: jagannadh.teki@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="G7WfDfRR"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zDVDk1thzz9s7F for ; Sun, 7 Jan 2018 05:19:34 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id C3687C21EFC; Sat, 6 Jan 2018 18:19:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 80231C21EFB; Sat, 6 Jan 2018 18:18:50 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0A2FFC21E90; Sat, 6 Jan 2018 18:18:48 +0000 (UTC) Received: from mail-it0-f65.google.com (mail-it0-f65.google.com [209.85.214.65]) by lists.denx.de (Postfix) with ESMTPS id 72FF2C21E90 for ; Sat, 6 Jan 2018 18:18:48 +0000 (UTC) Received: by mail-it0-f65.google.com with SMTP id m11so7493540iti.1 for ; Sat, 06 Jan 2018 10:18:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ndSlNz4TsYc5Q/4HpfSl6RuBuivPXBAnfiK4Sxz+Fik=; b=G7WfDfRRUrXAKWNC3goo5Z+dFdXSV3+laIf+JHlzWt+ze47gNmOKRaLSTukxlY1xgr dxmjectCBlm3hzO/d5mJukOfxS1rm9SWA5AfTfNo0othwcy5LXU71Dgxc+6ZodPyy0xH nipUMIlPxjAiREvLfuQE4LKuFZpQMAXDD+s+b+bG94ng21WjXB6ViF9kMDyf35lBNv+O RIUfwXd/fOH/il82xEZKHvZnOGxU5Xg7RhK9SmEAV/eqWzFdqjJEgva2tGnXbbaxZaRc QN9QaJb2/z9J7R1JoA3C4Kdn/ymaVtvHDa3s2ijc4yeU1+1zRbuiZMQUGwkTsLOq4Fdy 3qow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ndSlNz4TsYc5Q/4HpfSl6RuBuivPXBAnfiK4Sxz+Fik=; b=n6opYWeK0kER0ezB3qj/9cz22TrLlnSbqX3Mbz+qpgpqMH+2E18HViCZHr/6WGu2K5 i6a9x+B7NYh3iYqp3v9g6scA45/obB9sZ8DGckIvkIiyyi6Fl7cpEixodA8gUqwZRZxM ryzZ2b20TOQCqMwf82AYx6yY9bQcOL/tVVRFcqFm8qMOMfLK590/bWwlXdh7cnGEmYNv qPVuHHpHursBp+8SkEt5ng3p1V5TglfxA26UI0/eElEpT9UPyRy47bfr77KgedLPe4qB aOdLqZeBYn3gjdMnd/uTFCvoK2Su14Sa82Fwj0PHwXiVcjO2iffiz7t3qlOpQ1DU+6Qd 59gw== X-Gm-Message-State: AKGB3mLgLsst3HEoy9YY8pXtfvxSd+iHs6z+sQCOZVR8HeYPdU5SZ4Nu /6wBmXFntxuj4Sh/DF+lA02k X-Google-Smtp-Source: ACJfBovI9jc3RFYkdlpSVi6BNjoS8NDPUfrcpfVpV1B4EFKu5H9lvJj/jdsvG2OyalbdnTEV8D66uA== X-Received: by 10.36.219.195 with SMTP id c186mr6174426itg.61.1515262727048; Sat, 06 Jan 2018 10:18:47 -0800 (PST) Received: from localhost.localdomain (c-71-193-82-135.hsd1.mn.comcast.net. [71.193.82.135]) by smtp.gmail.com with ESMTPSA id l14sm4934838itl.24.2018.01.06.10.18.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 06 Jan 2018 10:18:46 -0800 (PST) From: Jason Rush To: u-boot@lists.denx.de Date: Sat, 6 Jan 2018 12:17:58 -0600 Message-Id: <20180106181802.9298-2-jarush@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180106181802.9298-1-jarush@gmail.com> References: <20180106181802.9298-1-jarush@gmail.com> Cc: marex@denx.de, Jason Rush Subject: [U-Boot] [PATCH v5 1/5] spi: cadence_spi: Sync DT bindings with Linux X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Adopt the Linux DT bindings. This also fixes an issue with the indaddrtrig register on the Cadence QSPI device being programmed with the wrong value for the socfpga arch. Tested on TI K2G platform: Tested-by: Vignesh R Tested on a socfpga-cyclonev board: Tested-by: Simon Goldschmidt Signed-off-by: Jason Rush Cc: Marek Vasut Reviewed-by: Jagan Teki --- Changes for v5: - Rebased Changes for v4: - Rebased Changes for v3: - None drivers/spi/cadence_qspi.c | 20 ++++++++++++-------- drivers/spi/cadence_qspi.h | 6 +++++- drivers/spi/cadence_qspi_apb.c | 15 ++++----------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c index 9a6e41f330..991a7160bd 100644 --- a/drivers/spi/cadence_qspi.c +++ b/drivers/spi/cadence_qspi.c @@ -212,7 +212,7 @@ static int cadence_spi_xfer(struct udevice *dev, unsigned int bitlen, /* Set Chip select */ cadence_qspi_apb_chipselect(base, spi_chip_select(dev), - CONFIG_CQSPI_DECODER); + plat->is_decoded_cs); if ((flags & SPI_XFER_END) || (flags == 0)) { if (priv->cmd_len == 0) { @@ -296,7 +296,11 @@ static int cadence_spi_ofdata_to_platdata(struct udevice *bus) plat->regbase = (void *)data[0]; plat->ahbbase = (void *)data[2]; - plat->sram_size = fdtdec_get_int(blob, node, "sram-size", 128); + plat->is_decoded_cs = fdtdec_get_bool(blob, node, "cdns,is-decoded-cs"); + plat->fifo_depth = fdtdec_get_uint(blob, node, "cdns,fifo-depth", 128); + plat->fifo_width = fdtdec_get_uint(blob, node, "cdns,fifo-width", 4); + plat->trigger_address = fdtdec_get_uint(blob, node, + "cdns,trigger-address", 0); /* All other paramters are embedded in the child node */ subnode = fdt_first_subnode(blob, node); @@ -310,12 +314,12 @@ static int cadence_spi_ofdata_to_platdata(struct udevice *bus) 500000); /* Read other parameters from DT */ - plat->page_size = fdtdec_get_int(blob, subnode, "page-size", 256); - plat->block_size = fdtdec_get_int(blob, subnode, "block-size", 16); - plat->tshsl_ns = fdtdec_get_int(blob, subnode, "tshsl-ns", 200); - plat->tsd2d_ns = fdtdec_get_int(blob, subnode, "tsd2d-ns", 255); - plat->tchsh_ns = fdtdec_get_int(blob, subnode, "tchsh-ns", 20); - plat->tslch_ns = fdtdec_get_int(blob, subnode, "tslch-ns", 20); + plat->page_size = fdtdec_get_uint(blob, subnode, "page-size", 256); + plat->block_size = fdtdec_get_uint(blob, subnode, "block-size", 16); + plat->tshsl_ns = fdtdec_get_uint(blob, subnode, "cdns,tshsl-ns", 200); + plat->tsd2d_ns = fdtdec_get_uint(blob, subnode, "cdns,tsd2d-ns", 255); + plat->tchsh_ns = fdtdec_get_uint(blob, subnode, "cdns,tchsh-ns", 20); + plat->tslch_ns = fdtdec_get_uint(blob, subnode, "cdns,tslch-ns", 20); debug("%s: regbase=%p ahbbase=%p max-frequency=%d page-size=%d\n", __func__, plat->regbase, plat->ahbbase, plat->max_hz, diff --git a/drivers/spi/cadence_qspi.h b/drivers/spi/cadence_qspi.h index d1927a4003..83154210bd 100644 --- a/drivers/spi/cadence_qspi.h +++ b/drivers/spi/cadence_qspi.h @@ -18,14 +18,18 @@ struct cadence_spi_platdata { unsigned int max_hz; void *regbase; void *ahbbase; + bool is_decoded_cs; + u32 fifo_depth; + u32 fifo_width; + u32 trigger_address; + // Flash parameters u32 page_size; u32 block_size; u32 tshsl_ns; u32 tsd2d_ns; u32 tchsh_ns; u32 tslch_ns; - u32 sram_size; }; struct cadence_spi_priv { diff --git a/drivers/spi/cadence_qspi_apb.c b/drivers/spi/cadence_qspi_apb.c index e02f2217f4..8309ab8794 100644 --- a/drivers/spi/cadence_qspi_apb.c +++ b/drivers/spi/cadence_qspi_apb.c @@ -37,10 +37,6 @@ #define CQSPI_REG_RETRY 10000 #define CQSPI_POLL_IDLE_RETRY 3 -#define CQSPI_FIFO_WIDTH 4 - -#define CQSPI_REG_SRAM_THRESHOLD_WORDS 50 - /* Transfer mode */ #define CQSPI_INST_TYPE_SINGLE 0 #define CQSPI_INST_TYPE_DUAL 1 @@ -51,9 +47,6 @@ #define CQSPI_DUMMY_CLKS_PER_BYTE 8 #define CQSPI_DUMMY_BYTES_MAX 4 -#define CQSPI_REG_SRAM_FILL_THRESHOLD \ - ((CQSPI_REG_SRAM_SIZE_WORD / 2) * CQSPI_FIFO_WIDTH) - /**************************************************************************** * Controller's configuration and status register (offset from QSPI_BASE) ****************************************************************************/ @@ -400,7 +393,7 @@ void cadence_qspi_apb_controller_init(struct cadence_spi_platdata *plat) writel(0, plat->regbase + CQSPI_REG_REMAP); /* Indirect mode configurations */ - writel((plat->sram_size/2), plat->regbase + CQSPI_REG_SRAMPARTITION); + writel((plat->fifo_depth/2), plat->regbase + CQSPI_REG_SRAMPARTITION); /* Disable all interrupts */ writel(0, plat->regbase + CQSPI_REG_IRQMASK); @@ -560,7 +553,7 @@ int cadence_qspi_apb_indirect_read_setup(struct cadence_spi_platdata *plat, addr_bytes = cmdlen - 1; /* Setup the indirect trigger address */ - writel((u32)plat->ahbbase, + writel(plat->trigger_address, plat->regbase + CQSPI_REG_INDIRECTTRIGGER); /* Configure the opcode */ @@ -659,7 +652,7 @@ int cadence_qspi_apb_indirect_read_execute(struct cadence_spi_platdata *plat, bytes_to_read = ret; while (bytes_to_read != 0) { - bytes_to_read *= CQSPI_FIFO_WIDTH; + bytes_to_read *= plat->fifo_width; bytes_to_read = bytes_to_read > remaining ? remaining : bytes_to_read; readsl(plat->ahbbase, bb_rxbuf, bytes_to_read >> 2); @@ -710,7 +703,7 @@ int cadence_qspi_apb_indirect_write_setup(struct cadence_spi_platdata *plat, return -EINVAL; } /* Setup the indirect trigger address */ - writel((u32)plat->ahbbase, + writel(plat->trigger_address, plat->regbase + CQSPI_REG_INDIRECTTRIGGER); /* Configure the opcode */