From: Emil Renner Berthing <esmil@mailme.dk>
To: linux-spi@vger.kernel.org
Cc: Emil Renner Berthing <kernel@esmil.dk>,
Addy Ke <addy.ke@rock-chips.com>, Mark Brown <broonie@kernel.org>,
Heiko Stuebner <heiko@sntech.de>,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: [PATCH v1 11/14] spi: rockchip: precompute rx sample delay
Date: Wed, 31 Oct 2018 11:57:08 +0100 [thread overview]
Message-ID: <20181031105711.19575-12-esmil@mailme.dk> (raw)
In-Reply-To: <20181031105711.19575-1-esmil@mailme.dk>
From: Emil Renner Berthing <kernel@esmil.dk>
Now that we no longer potentially change spi clock
at runtime we can precompute the rx sample delay
at probe time rather than for each transfer.
Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
---
drivers/spi/spi-rockchip.c | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index d1b3ba2b1532..5fe6099ff366 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -94,6 +94,7 @@
#define CR0_BHT_8BIT 0x1
#define CR0_RSD_OFFSET 14
+#define CR0_RSD_MAX 0x3
#define CR0_FRF_OFFSET 16
#define CR0_FRF_SPI 0x0
@@ -179,7 +180,7 @@ struct rockchip_spi {
u32 freq;
u8 n_bytes;
- u32 rsd_nsecs;
+ u8 rsd;
const void *tx;
const void *tx_end;
@@ -450,13 +451,13 @@ static void rockchip_spi_config(struct rockchip_spi *rs,
bool use_dma)
{
u32 dmacr = 0;
- int rsd = 0;
u32 cr0 = CR0_FRF_SPI << CR0_FRF_OFFSET
| CR0_BHT_8BIT << CR0_BHT_OFFSET
| CR0_SSD_ONE << CR0_SSD_OFFSET
| CR0_EM_BIG << CR0_EM_OFFSET;
+ cr0 |= rs->rsd << CR0_RSD_OFFSET;
cr0 |= (rs->n_bytes << CR0_DFS_OFFSET);
cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET;
@@ -474,20 +475,6 @@ static void rockchip_spi_config(struct rockchip_spi *rs,
dmacr |= RF_DMA_EN;
}
- /* Rx sample delay is expressed in parent clock cycles (max 3) */
- rsd = DIV_ROUND_CLOSEST(rs->rsd_nsecs * (rs->freq >> 8),
- 1000000000 >> 8);
- if (!rsd && rs->rsd_nsecs) {
- pr_warn_once("rockchip-spi: %u Hz are too slow to express %u ns delay\n",
- rs->freq, rs->rsd_nsecs);
- } else if (rsd > 3) {
- rsd = 3;
- pr_warn_once("rockchip-spi: %u Hz are too fast to express %u ns delay, clamping at %u ns\n",
- rs->freq, rs->rsd_nsecs,
- rsd * 1000000000U / rs->freq);
- }
- cr0 |= rsd << CR0_RSD_OFFSET;
-
writel_relaxed(cr0, rs->regs + ROCKCHIP_SPI_CTRLR0);
if (rs->n_bytes == 1)
@@ -620,8 +607,21 @@ static int rockchip_spi_probe(struct platform_device *pdev)
rs->freq = clk_get_rate(rs->spiclk);
if (!of_property_read_u32(pdev->dev.of_node, "rx-sample-delay-ns",
- &rsd_nsecs))
- rs->rsd_nsecs = rsd_nsecs;
+ &rsd_nsecs)) {
+ /* rx sample delay is expressed in parent clock cycles (max 3) */
+ u32 rsd = DIV_ROUND_CLOSEST(rsd_nsecs * (rs->freq >> 8),
+ 1000000000 >> 8);
+ if (!rsd) {
+ dev_warn(rs->dev, "%u Hz are too slow to express %u ns delay\n",
+ rs->freq, rsd_nsecs);
+ } else if (rsd > CR0_RSD_MAX) {
+ rsd = CR0_RSD_MAX;
+ dev_warn(rs->dev, "%u Hz are too fast to express %u ns delay, clamping at %u ns\n",
+ rs->freq, rsd_nsecs,
+ CR0_RSD_MAX * 1000000000U / rs->freq);
+ }
+ rs->rsd = rsd;
+ }
rs->fifo_len = get_fifo_len(rs);
if (!rs->fifo_len) {
--
2.19.1
next prev parent reply other threads:[~2018-10-31 10:58 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-31 10:56 [PATCH v1 00/14] Rockchip SPI cleanup and use interrupts Emil Renner Berthing
2018-10-31 10:56 ` [PATCH v1 01/14] spi: rockchip: make spi_enable_chip take bool Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: make spi_enable_chip take bool" to the spi tree Mark Brown
2018-10-31 10:56 ` [PATCH v1 02/14] spi: rockchip: use designated init for dma config Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: use designated init for dma config" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 03/14] spi: rockchip: always use SPI mode Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: always use SPI mode" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 04/14] spi: rockchip: use atomic_t state Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: use atomic_t state" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 05/14] spi: rockchip: disable spi on error Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: disable spi on error" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 06/14] spi: rockchip: read transfer info directly Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: read transfer info directly" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 07/14] spi: rockchip: don't store dma channels twice Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: don't store dma channels twice" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 08/14] spi: rockchip: remove master pointer from dev data Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: remove master pointer from dev data" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 09/14] spi: rockchip: simplify use_dma logic Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: simplify use_dma logic" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 10/14] spi: rockchip: set min/max speed Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: set min/max speed" to the spi tree Mark Brown
2018-10-31 10:57 ` Emil Renner Berthing [this message]
2018-11-05 12:06 ` Applied "spi: rockchip: precompute rx sample delay" " Mark Brown
2018-10-31 10:57 ` [PATCH v1 12/14] spi: rockchip: use irq rather than polling Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: use irq rather than polling" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 13/14] spi: rockchip: support 4bit words Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: support 4bit words" to the spi tree Mark Brown
2018-10-31 10:57 ` [PATCH v1 14/14] spi: rockchip: support lsb-first mode Emil Renner Berthing
2018-11-05 12:06 ` Applied "spi: rockchip: support lsb-first mode" to the spi tree Mark Brown
2018-10-31 11:20 ` [PATCH v1 00/14] Rockchip SPI cleanup and use interrupts Heiko Stübner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181031105711.19575-12-esmil@mailme.dk \
--to=esmil@mailme.dk \
--cc=addy.ke@rock-chips.com \
--cc=broonie@kernel.org \
--cc=heiko@sntech.de \
--cc=kernel@esmil.dk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-spi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).