From: Wolfram Sang <wsa+renesas@sang-engineering.com> To: linux-i2c@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-iio@vger.kernel.org, linux-input@vger.kernel.org, linux-media@vger.kernel.org, Mark Brown <broonie@kernel.org>, Wolfram Sang <wsa+renesas@sang-engineering.com> Subject: [PATCH v6 0/9] i2c: document DMA handling and add helpers for it Date: Sat, 4 Nov 2017 21:20:00 +0100 [thread overview] Message-ID: <20171104202009.3818-1-wsa+renesas@sang-engineering.com> (raw) So, after revisiting old mail threads, taking part in a similar discussion on the USB list, and implementing a not-convincing solution before, here is what I cooked up to document and ease DMA handling for I2C within Linux. Please have a look at the documentation introduced in patch 7 for details. And to make it clear again: The stuff below is opt-in. If host drivers are not updated, they will continue to work like before. While previous versions until v3 tried to magically apply bounce buffers when needed, it became clear that detecting DMA safe buffers is too fragile. This approach is now opt-in, a DMA_SAFE flag needs to be set on an i2c_msg. The outcome so far is very convincing IMO. The core additions are simple and easy to understand. The driver changes for the Renesas IP cores became easy to understand, too. Of course, we must now whitelist DMA safe buffers. This series implements it for core functionality: a) for the I2C_RDWR when messages come from userspace b) for i2c_smbus_xfer_emulated(), DMA safe buffers are now allocated for block transfers c) i2c_master_{send|recv} have now a *_dmasafe variant I am still not sure how we can teach regmap this new flag. regmap is a heavy user of I2C, so broonie's opinion here would be great to have. The rest should mostly be updating individual drivers which can be done when needed. All patches have been tested with a Renesas Salvator-X board (r8a7796/M3-W) and Renesas Lager board (r8a7790/H2). But more testing is really really welcome. The branch can be found here: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/topic/i2c-core-dma-v6 It is planned to land upstream in v4.16 and I want to push it to linux-next early after v4.15 to get lots of testing for the core changes. Big kudos to Renesas Electronics for funding this work, thank you very much! Regards, Wolfram Change since V5: * i2c_master_{send|recv} have now a *_dmasafe variant * for i2c_smbus_xfer_emulated(), DMA safe buffers are now allocated for block transfers * updated the documentation * merged some rewording suggestions from Jonathan Cameron (thanks!) * rebased the patches v4.14-rc6+i2c/for-next, reordered patches Wolfram Sang (9): i2c: add a message flag for DMA safe buffers i2c: add helpers to ease DMA handling i2c: dev: mark RDWR buffers as DMA_SAFE i2c: refactor i2c_master_{send_recv} i2c: add i2c_master_{send|recv}_dmasafe i2c: smbus: use DMA safe buffers for emulated SMBus transactions i2c: add docs to clarify DMA handling i2c: sh_mobile: use core helper to decide when to use DMA i2c: rcar: skip DMA if buffer is not safe Documentation/i2c/DMA-considerations | 67 +++++++++++++++++++++ drivers/i2c/busses/i2c-rcar.c | 2 +- drivers/i2c/busses/i2c-sh_mobile.c | 8 ++- drivers/i2c/i2c-core-base.c | 110 ++++++++++++++++++++--------------- drivers/i2c/i2c-core-smbus.c | 45 ++++++++++++-- drivers/i2c/i2c-dev.c | 2 + include/linux/i2c.h | 68 ++++++++++++++++++++-- include/uapi/linux/i2c.h | 3 + 8 files changed, 246 insertions(+), 59 deletions(-) create mode 100644 Documentation/i2c/DMA-considerations -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: Wolfram Sang <wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/@public.gmane.org> To: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, Wolfram Sang <wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/@public.gmane.org> Subject: [PATCH v6 0/9] i2c: document DMA handling and add helpers for it Date: Sat, 4 Nov 2017 21:20:00 +0100 [thread overview] Message-ID: <20171104202009.3818-1-wsa+renesas@sang-engineering.com> (raw) So, after revisiting old mail threads, taking part in a similar discussion on the USB list, and implementing a not-convincing solution before, here is what I cooked up to document and ease DMA handling for I2C within Linux. Please have a look at the documentation introduced in patch 7 for details. And to make it clear again: The stuff below is opt-in. If host drivers are not updated, they will continue to work like before. While previous versions until v3 tried to magically apply bounce buffers when needed, it became clear that detecting DMA safe buffers is too fragile. This approach is now opt-in, a DMA_SAFE flag needs to be set on an i2c_msg. The outcome so far is very convincing IMO. The core additions are simple and easy to understand. The driver changes for the Renesas IP cores became easy to understand, too. Of course, we must now whitelist DMA safe buffers. This series implements it for core functionality: a) for the I2C_RDWR when messages come from userspace b) for i2c_smbus_xfer_emulated(), DMA safe buffers are now allocated for block transfers c) i2c_master_{send|recv} have now a *_dmasafe variant I am still not sure how we can teach regmap this new flag. regmap is a heavy user of I2C, so broonie's opinion here would be great to have. The rest should mostly be updating individual drivers which can be done when needed. All patches have been tested with a Renesas Salvator-X board (r8a7796/M3-W) and Renesas Lager board (r8a7790/H2). But more testing is really really welcome. The branch can be found here: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/topic/i2c-core-dma-v6 It is planned to land upstream in v4.16 and I want to push it to linux-next early after v4.15 to get lots of testing for the core changes. Big kudos to Renesas Electronics for funding this work, thank you very much! Regards, Wolfram Change since V5: * i2c_master_{send|recv} have now a *_dmasafe variant * for i2c_smbus_xfer_emulated(), DMA safe buffers are now allocated for block transfers * updated the documentation * merged some rewording suggestions from Jonathan Cameron (thanks!) * rebased the patches v4.14-rc6+i2c/for-next, reordered patches Wolfram Sang (9): i2c: add a message flag for DMA safe buffers i2c: add helpers to ease DMA handling i2c: dev: mark RDWR buffers as DMA_SAFE i2c: refactor i2c_master_{send_recv} i2c: add i2c_master_{send|recv}_dmasafe i2c: smbus: use DMA safe buffers for emulated SMBus transactions i2c: add docs to clarify DMA handling i2c: sh_mobile: use core helper to decide when to use DMA i2c: rcar: skip DMA if buffer is not safe Documentation/i2c/DMA-considerations | 67 +++++++++++++++++++++ drivers/i2c/busses/i2c-rcar.c | 2 +- drivers/i2c/busses/i2c-sh_mobile.c | 8 ++- drivers/i2c/i2c-core-base.c | 110 ++++++++++++++++++++--------------- drivers/i2c/i2c-core-smbus.c | 45 ++++++++++++-- drivers/i2c/i2c-dev.c | 2 + include/linux/i2c.h | 68 ++++++++++++++++++++-- include/uapi/linux/i2c.h | 3 + 8 files changed, 246 insertions(+), 59 deletions(-) create mode 100644 Documentation/i2c/DMA-considerations -- 2.11.0
next reply other threads:[~2017-11-04 20:20 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-11-04 20:20 Wolfram Sang [this message] 2017-11-04 20:20 ` [PATCH v6 0/9] i2c: document DMA handling and add helpers for it Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 1/9] i2c: add a message flag for DMA safe buffers Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 2/9] i2c: add helpers to ease DMA handling Wolfram Sang 2017-11-04 20:20 ` Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 3/9] i2c: dev: mark RDWR buffers as DMA_SAFE Wolfram Sang 2017-11-04 20:20 ` Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 4/9] i2c: refactor i2c_master_{send_recv} Wolfram Sang 2017-11-11 0:03 ` Jonathan Cameron 2017-11-11 0:03 ` Jonathan Cameron 2017-11-04 20:20 ` [PATCH v6 5/9] i2c: add i2c_master_{send|recv}_dmasafe Wolfram Sang 2017-11-11 0:08 ` Jonathan Cameron 2017-11-11 0:08 ` Jonathan Cameron 2017-11-04 20:20 ` [PATCH v6 6/9] i2c: smbus: use DMA safe buffers for emulated SMBus transactions Wolfram Sang 2017-11-11 0:13 ` Jonathan Cameron 2017-11-11 0:13 ` Jonathan Cameron 2017-11-04 20:20 ` [PATCH v6 7/9] i2c: add docs to clarify DMA handling Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 8/9] i2c: sh_mobile: use core helper to decide when to use DMA Wolfram Sang 2017-11-04 20:20 ` [PATCH v6 9/9] i2c: rcar: skip DMA if buffer is not safe Wolfram Sang 2017-11-08 22:50 ` [PATCH v6 0/9] i2c: document DMA handling and add helpers for it Mark Brown 2017-11-27 18:51 ` Wolfram Sang 2017-11-28 15:34 ` Mark Brown 2017-12-03 19:43 ` Wolfram Sang 2017-12-04 22:05 ` Mark Brown 2017-12-04 22:05 ` Mark Brown 2017-12-05 11:00 ` Jonathan Cameron 2017-12-05 11:00 ` Jonathan Cameron 2017-12-04 21:25 ` Wolfram Sang
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=20171104202009.3818-1-wsa+renesas@sang-engineering.com \ --to=wsa+renesas@sang-engineering.com \ --cc=broonie@kernel.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: linkBe 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.