All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wolfram Sang <wsa+renesas@sang-engineering.com>
To: linux-i2c@vger.kernel.org
Cc: linux-renesas-soc@vger.kernel.org, linux-media@vger.kernel.org,
	linux-input@vger.kernel.org, linux-iio@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org,
	Wolfram Sang <wsa+renesas@sang-engineering.com>
Subject: [PATCH v3 2/4] i2c: add docs to clarify DMA handling
Date: Tue, 18 Jul 2017 12:23:37 +0200	[thread overview]
Message-ID: <20170718102339.28726-3-wsa+renesas@sang-engineering.com> (raw)
In-Reply-To: <20170718102339.28726-1-wsa+renesas@sang-engineering.com>

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
---
Changes since v2:

* documentation updates. Hopefully better wording now

 Documentation/i2c/DMA-considerations | 38 ++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 Documentation/i2c/DMA-considerations

diff --git a/Documentation/i2c/DMA-considerations b/Documentation/i2c/DMA-considerations
new file mode 100644
index 00000000000000..e46c24d65c8556
--- /dev/null
+++ b/Documentation/i2c/DMA-considerations
@@ -0,0 +1,38 @@
+Linux I2C and DMA
+-----------------
+
+Given that I2C is a low-speed bus where largely small messages are transferred,
+it is not considered a prime user of DMA access. At this time of writing, only
+10% of I2C bus master drivers have DMA support implemented. And the vast
+majority of transactions are so small that setting up DMA for it will likely
+add more overhead than a plain PIO transfer.
+
+Therefore, it is *not* mandatory that the buffer of an I2C message is DMA safe.
+It does not seem reasonable to apply additional burdens when the feature is so
+rarely used. However, it is recommended to use a DMA-safe buffer if your
+message size is likely applicable for DMA. Most drivers have this threshold
+around 8 bytes. As of today, this is mostly an educated guess, however.
+
+To support this scenario, drivers wishing to implement DMA can use helper
+functions from the I2C core. One checks if a message is DMA capable in terms of
+size and memory type. It can optionally also create a bounce buffer:
+
+	i2c_check_msg_for_dma(msg, threshold, &bounce_buf);
+
+The bounce buffer handling from the core is generic and simple. It will always
+allocate a new bounce buffer. If you want a more sophisticated handling (e.g.
+reusing pre-allocated buffers), you can leave the pointer to the bounce buffer
+empty and implement your own handling based on the return value of the above
+function.
+
+The other helper function releases the bounce buffer. It ensures data is copied
+back to the message:
+
+	i2c_release_dma_bounce_buf(msg, bounce_buf);
+
+Please check the in-kernel documentation for details. The i2c-sh_mobile driver
+can be used as a reference example.
+
+If you plan to use DMA with I2C (or with any other bus, actually) make sure you
+have CONFIG_DMA_API_DEBUG enabled during development. It can help you find
+various issues which can be complex to debug otherwise.
-- 
2.11.0

  parent reply	other threads:[~2017-07-18 10:24 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-18 10:23 [PATCH v3 0/4] i2c: document DMA handling and add helpers for it Wolfram Sang
2017-07-18 10:23 ` Wolfram Sang
2017-07-18 10:23 ` [PATCH v3 1/4] i2c: add helpers to ease DMA handling Wolfram Sang
2017-07-18 10:23   ` Wolfram Sang
2017-07-19  9:28   ` Niklas Söderlund
2017-07-19  9:28     ` Niklas Söderlund
2017-07-19  9:28     ` Niklas Söderlund
2017-07-23 11:22   ` Jonathan Cameron
2017-08-16 20:58     ` Wolfram Sang
2017-08-16 20:58       ` Wolfram Sang
2017-08-16 14:51   ` Geert Uytterhoeven
2017-08-16 16:06     ` Wolfram Sang
2017-07-18 10:23 ` Wolfram Sang [this message]
2017-07-19  9:28   ` [PATCH v3 2/4] i2c: add docs to clarify " Niklas Söderlund
2017-07-19  9:28     ` Niklas Söderlund
2017-07-23 11:26   ` Jonathan Cameron
2017-07-23 11:26     ` Jonathan Cameron
2017-07-18 10:23 ` [PATCH v3 3/4] i2c: sh_mobile: use helper to decide if DMA is useful Wolfram Sang
2017-07-18 10:23   ` Wolfram Sang
2017-07-19  9:35   ` Niklas Söderlund
2017-07-19  9:35     ` Niklas Söderlund
2017-07-19  9:35     ` Niklas Söderlund
2017-07-18 10:23 ` [PATCH v3 4/4] i2c: rcar: check for DMA-capable buffers Wolfram Sang
2017-07-18 10:23   ` Wolfram Sang
2017-07-19  9:42   ` Niklas Söderlund
2017-07-19  9:42     ` Niklas Söderlund
2017-07-19  9:42     ` Niklas Söderlund

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=20170718102339.28726-3-wsa+renesas@sang-engineering.com \
    --to=wsa+renesas@sang-engineering.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-renesas-soc@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.