* [PATCH] i2c: sh_mobile: implement atomic transfers
@ 2020-06-10 19:33 Ulrich Hecht
2020-06-14 9:31 ` Wolfram Sang
2020-06-15 9:41 ` Geert Uytterhoeven
0 siblings, 2 replies; 11+ messages in thread
From: Ulrich Hecht @ 2020-06-10 19:33 UTC (permalink / raw)
To: linux-renesas-soc; +Cc: wsa, linux-i2c, Ulrich Hecht
Implements atomic transfers to fix reboot/shutdown on r8a7790 Lager and
similar boards.
Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
---
drivers/i2c/busses/i2c-sh_mobile.c | 100 +++++++++++++++++++++++++++----------
1 file changed, 74 insertions(+), 26 deletions(-)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index d83ca40..e8436f4 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -129,6 +129,7 @@ struct sh_mobile_i2c_data {
int sr;
bool send_stop;
bool stop_after_dma;
+ bool atomic_xfer;
struct resource *res;
struct dma_chan *dma_tx;
@@ -330,13 +331,15 @@ static unsigned char i2c_op(struct sh_mobile_i2c_data *pd, enum sh_mobile_i2c_op
ret = iic_rd(pd, ICDR);
break;
case OP_RX_STOP: /* enable DTE interrupt, issue stop */
- iic_wr(pd, ICIC,
- ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
+ if (!pd->atomic_xfer)
+ iic_wr(pd, ICIC,
+ ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
iic_wr(pd, ICCR, ICCR_ICE | ICCR_RACK);
break;
case OP_RX_STOP_DATA: /* enable DTE interrupt, read data, issue stop */
- iic_wr(pd, ICIC,
- ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
+ if (!pd->atomic_xfer)
+ iic_wr(pd, ICIC,
+ ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
ret = iic_rd(pd, ICDR);
iic_wr(pd, ICCR, ICCR_ICE | ICCR_RACK);
break;
@@ -366,7 +369,7 @@ static int sh_mobile_i2c_isr_tx(struct sh_mobile_i2c_data *pd)
static int sh_mobile_i2c_isr_rx(struct sh_mobile_i2c_data *pd)
{
- unsigned char data;
+ unsigned char data = 0;
int real_pos;
/* switch from TX (address) to RX (data) adds two interrupts */
@@ -432,7 +435,8 @@ static irqreturn_t sh_mobile_i2c_isr(int irq, void *dev_id)
if (wakeup) {
pd->sr |= SW_DONE;
- wake_up(&pd->wait);
+ if (!pd->atomic_xfer)
+ wake_up(&pd->wait);
}
/* defeat write posting to avoid spurious WAIT interrupts */
@@ -584,12 +588,14 @@ static void start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg,
pd->pos = -1;
pd->sr = 0;
- pd->dma_buf = i2c_get_dma_safe_msg_buf(pd->msg, 8);
- if (pd->dma_buf)
- sh_mobile_i2c_xfer_dma(pd);
-
- /* Enable all interrupts to begin with */
- iic_wr(pd, ICIC, ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
+ if (!pd->atomic_xfer) {
+ pd->dma_buf = i2c_get_dma_safe_msg_buf(pd->msg, 8);
+ if (pd->dma_buf)
+ sh_mobile_i2c_xfer_dma(pd);
+ /* Enable all interrupts to begin with */
+ iic_wr(pd, ICIC,
+ ICIC_DTEE | ICIC_WAITE | ICIC_ALE | ICIC_TACKE);
+ }
}
static int poll_dte(struct sh_mobile_i2c_data *pd)
@@ -640,18 +646,16 @@ static int poll_busy(struct sh_mobile_i2c_data *pd)
return i ? 0 : -ETIMEDOUT;
}
-static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
- struct i2c_msg *msgs,
- int num)
+static int xfer(struct sh_mobile_i2c_data *pd, struct i2c_msg *msgs, int num)
{
- struct sh_mobile_i2c_data *pd = i2c_get_adapdata(adapter);
struct i2c_msg *msg;
int err = 0;
int i;
long timeout;
/* Wake up device and enable clock */
- pm_runtime_get_sync(pd->dev);
+ if (!pd->atomic_xfer)
+ pm_runtime_get_sync(pd->dev);
/* Process all messages */
for (i = 0; i < num; i++) {
@@ -665,13 +669,35 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
if (do_start)
i2c_op(pd, OP_START);
- /* The interrupt handler takes care of the rest... */
- timeout = wait_event_timeout(pd->wait,
- pd->sr & (ICSR_TACK | SW_DONE),
- adapter->timeout);
+ if (pd->atomic_xfer) {
+ unsigned long j = jiffies + pd->adap.timeout;
+
+ timeout = 1;
+ while (!time_after(jiffies, j) &&
+ !(pd->sr & (ICSR_TACK | SW_DONE))) {
+ unsigned char sr = iic_rd(pd, ICSR);
+
+ if (sr & (ICSR_AL | ICSR_TACK |
+ ICSR_WAIT | ICSR_DTE)) {
+ sh_mobile_i2c_isr(0, pd);
+ udelay(150);
+ } else
+ cpu_relax();
+ }
+
+ if (time_after(jiffies, j))
+ timeout = 0;
+ } else {
+ /* The interrupt handler takes care of the rest... */
+ timeout = wait_event_timeout(pd->wait,
+ pd->sr & (ICSR_TACK | SW_DONE),
+ pd->adap.timeout);
- /* 'stop_after_dma' tells if DMA transfer was complete */
- i2c_put_dma_safe_msg_buf(pd->dma_buf, pd->msg, pd->stop_after_dma);
+ /* 'stop_after_dma' tells if DMA xfer was complete */
+ i2c_put_dma_safe_msg_buf(pd->dma_buf, pd->msg,
+ pd->stop_after_dma);
+
+ }
if (!timeout) {
dev_err(pd->dev, "Transfer request timed out\n");
@@ -694,19 +720,41 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
iic_wr(pd, ICCR, ICCR_SCP);
/* Disable clock and mark device as idle */
- pm_runtime_put_sync(pd->dev);
+ if (!pd->atomic_xfer)
+ pm_runtime_put_sync(pd->dev);
return err ?: num;
}
+static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
+ struct i2c_msg *msgs,
+ int num)
+{
+ struct sh_mobile_i2c_data *pd = i2c_get_adapdata(adapter);
+
+ pd->atomic_xfer = false;
+ return xfer(pd, msgs, num);
+}
+
+static int sh_mobile_i2c_xfer_atomic(struct i2c_adapter *adapter,
+ struct i2c_msg *msgs,
+ int num)
+{
+ struct sh_mobile_i2c_data *pd = i2c_get_adapdata(adapter);
+
+ pd->atomic_xfer = true;
+ return xfer(pd, msgs, num);
+}
+
static u32 sh_mobile_i2c_func(struct i2c_adapter *adapter)
{
return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_PROTOCOL_MANGLING;
}
static const struct i2c_algorithm sh_mobile_i2c_algorithm = {
- .functionality = sh_mobile_i2c_func,
- .master_xfer = sh_mobile_i2c_xfer,
+ .functionality = sh_mobile_i2c_func,
+ .master_xfer = sh_mobile_i2c_xfer,
+ .master_xfer_atomic = sh_mobile_i2c_xfer_atomic,
};
static const struct i2c_adapter_quirks sh_mobile_i2c_quirks = {
--
2.7.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-10 19:33 [PATCH] i2c: sh_mobile: implement atomic transfers Ulrich Hecht
@ 2020-06-14 9:31 ` Wolfram Sang
2020-06-15 10:01 ` Geert Uytterhoeven
2020-06-18 9:53 ` Ulrich Hecht
2020-06-15 9:41 ` Geert Uytterhoeven
1 sibling, 2 replies; 11+ messages in thread
From: Wolfram Sang @ 2020-06-14 9:31 UTC (permalink / raw)
To: Ulrich Hecht; +Cc: linux-renesas-soc, linux-i2c
[-- Attachment #1: Type: text/plain, Size: 2789 bytes --]
On Wed, Jun 10, 2020 at 09:33:11PM +0200, Ulrich Hecht wrote:
> Implements atomic transfers to fix reboot/shutdown on r8a7790 Lager and
> similar boards.
>
> Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
Thanks, Uli! Works fine here. Really nice to finally being able to
reboot now without WARNings.
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Some review comments:
> @@ -366,7 +369,7 @@ static int sh_mobile_i2c_isr_tx(struct sh_mobile_i2c_data *pd)
>
> static int sh_mobile_i2c_isr_rx(struct sh_mobile_i2c_data *pd)
> {
> - unsigned char data;
> + unsigned char data = 0;
Please rebase against i2c/for-next. 'data' is gone since recently.
> -static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
> - struct i2c_msg *msgs,
> - int num)
> +static int xfer(struct sh_mobile_i2c_data *pd, struct i2c_msg *msgs, int num)
'xfer' is too generic IMO. '__sh_mobile_i2c_xfer' maybe?
> - pm_runtime_get_sync(pd->dev);
> + if (!pd->atomic_xfer)
> + pm_runtime_get_sync(pd->dev);
This was a small surprise to me. I assume RPM is disabled that late?
But can we be sure the clock is on, then?
> + if (pd->atomic_xfer) {
> + unsigned long j = jiffies + pd->adap.timeout;
> +
> + timeout = 1;
> + while (!time_after(jiffies, j) &&
To avoid the negation, maybe 'time_before_eq(...)'?
> + !(pd->sr & (ICSR_TACK | SW_DONE))) {
> + unsigned char sr = iic_rd(pd, ICSR);
> +
> + if (sr & (ICSR_AL | ICSR_TACK |
> + ICSR_WAIT | ICSR_DTE)) {
> + sh_mobile_i2c_isr(0, pd);
> + udelay(150);
> + } else
> + cpu_relax();
Braces for else block.
> + }
> +
> + if (time_after(jiffies, j))
> + timeout = 0;
Uhh, 'timeout' should have been named 'time_left' back then. Then, this
all would be more readable and we could do here:
time_left = time_before_eq(...);
and avoid both 'timeout' assignments above.
> +static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
> + struct i2c_msg *msgs,
> + int num)
> +{
> + struct sh_mobile_i2c_data *pd = i2c_get_adapdata(adapter);
> +
> + pd->atomic_xfer = false;
Maybe move this above to the xfer function ...
> + return xfer(pd, msgs, num);
... and have here only:
return __sh_mobile_i2c_xfer(adapter, msgs, num, false);
But yeah, this is bike-shedding. I don't mind much.
> static const struct i2c_algorithm sh_mobile_i2c_algorithm = {
> - .functionality = sh_mobile_i2c_func,
> - .master_xfer = sh_mobile_i2c_xfer,
> + .functionality = sh_mobile_i2c_func,
> + .master_xfer = sh_mobile_i2c_xfer,
> + .master_xfer_atomic = sh_mobile_i2c_xfer_atomic,
Just convert to a single space before the '='.
All the best,
Wolfram
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-10 19:33 [PATCH] i2c: sh_mobile: implement atomic transfers Ulrich Hecht
2020-06-14 9:31 ` Wolfram Sang
@ 2020-06-15 9:41 ` Geert Uytterhoeven
2020-06-15 12:50 ` Wolfram Sang
1 sibling, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-06-15 9:41 UTC (permalink / raw)
To: Ulrich Hecht; +Cc: Linux-Renesas, Wolfram Sang, Linux I2C
Hi Uli,
On Wed, Jun 10, 2020 at 10:19 PM Ulrich Hecht <uli+renesas@fpond.eu> wrote:
> Implements atomic transfers to fix reboot/shutdown on r8a7790 Lager and
> similar boards.
>
> Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
After removing the first hunk, this works fine on r8a7791/koelsch.
The following warnings are no longer seen:
WARNING: CPU: 0 PID: 1 at drivers/i2c/i2c-core.h:41 i2c_transfer+0x80/0xf8
No atomic I2C transfer handler for 'i2c-6'
...
WARNING: CPU: 0 PID: 1 at kernel/sched/core.c:1731 set_task_cpu+0xf4/0x1fc
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-14 9:31 ` Wolfram Sang
@ 2020-06-15 10:01 ` Geert Uytterhoeven
2020-06-15 12:48 ` Wolfram Sang
2020-06-18 9:53 ` Ulrich Hecht
1 sibling, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-06-15 10:01 UTC (permalink / raw)
To: Wolfram Sang, Ulrich Hecht; +Cc: Linux-Renesas, Linux I2C
Hi Wolfram, Uli,
On Sun, Jun 14, 2020 at 11:31 AM Wolfram Sang <wsa@the-dreams.de> wrote:
> On Wed, Jun 10, 2020 at 09:33:11PM +0200, Ulrich Hecht wrote:
> > Implements atomic transfers to fix reboot/shutdown on r8a7790 Lager and
> > similar boards.
> >
> > Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
>
> Thanks, Uli! Works fine here. Really nice to finally being able to
> reboot now without WARNings.
> > - pm_runtime_get_sync(pd->dev);
> > + if (!pd->atomic_xfer)
> > + pm_runtime_get_sync(pd->dev);
>
> This was a small surprise to me. I assume RPM is disabled that late?
> But can we be sure the clock is on, then?
And the power domain, as this is for i2c-sh_mobile.c.
On SH/R-Mobile SoCs, the i2c block is part of a power area.
Most are part of A3SP (which is never really disabled due to being
shared with other devices), or C5 (always-on), but i2c0 on R-Mobile A1
is part of A4R, which is usually suspended.
Uli: can you check if atomic transfers work with the touchscreen or
codec on Armadillo-800-EVA?
Thanks!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 10:01 ` Geert Uytterhoeven
@ 2020-06-15 12:48 ` Wolfram Sang
2020-06-15 12:58 ` Geert Uytterhoeven
0 siblings, 1 reply; 11+ messages in thread
From: Wolfram Sang @ 2020-06-15 12:48 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
[-- Attachment #1: Type: text/plain, Size: 224 bytes --]
> Uli: can you check if atomic transfers work with the touchscreen or
> codec on Armadillo-800-EVA?
Atmoic transfers are used for very late communication (e.g. PMIC).
Touchscreens and codecs should be already down, then.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 9:41 ` Geert Uytterhoeven
@ 2020-06-15 12:50 ` Wolfram Sang
2020-06-15 12:57 ` Geert Uytterhoeven
0 siblings, 1 reply; 11+ messages in thread
From: Wolfram Sang @ 2020-06-15 12:50 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
[-- Attachment #1: Type: text/plain, Size: 134 bytes --]
> After removing the first hunk, this works fine on r8a7791/koelsch.
Removing the first hunk? This one?
+ bool atomic_xfer;
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 12:50 ` Wolfram Sang
@ 2020-06-15 12:57 ` Geert Uytterhoeven
2020-06-15 13:08 ` Wolfram Sang
0 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-06-15 12:57 UTC (permalink / raw)
To: Wolfram Sang; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
Hi Wolfram,
On Mon, Jun 15, 2020 at 2:50 PM Wolfram Sang <wsa@the-dreams.de> wrote:
> > After removing the first hunk, this works fine on r8a7791/koelsch.
>
> Removing the first hunk? This one?
>
> + bool atomic_xfer;
Oops, no. I hadn't looked that close at the numbers, and assumed the failure
was about the first hunk:
Hunk #3 FAILED at 369.
Hunk #4 succeeded at 432 (offset -3 lines).
Hunk #5 succeeded at 585 (offset -3 lines).
Hunk #6 succeeded at 643 (offset -3 lines).
Hunk #7 succeeded at 666 (offset -3 lines).
Hunk #8 succeeded at 717 (offset -3 lines).
1 out of 8 hunks FAILED -- saving rejects to file
drivers/i2c/busses/i2c-sh_mobile.c.rej
I meant the one with the "data" var.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 12:48 ` Wolfram Sang
@ 2020-06-15 12:58 ` Geert Uytterhoeven
2020-06-15 13:12 ` Wolfram Sang
0 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-06-15 12:58 UTC (permalink / raw)
To: Wolfram Sang; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
Hi Wolfram,
On Mon, Jun 15, 2020 at 2:48 PM Wolfram Sang <wsa@the-dreams.de> wrote:
> > Uli: can you check if atomic transfers work with the touchscreen or
> > codec on Armadillo-800-EVA?
>
> Atmoic transfers are used for very late communication (e.g. PMIC).
> Touchscreens and codecs should be already down, then.
So how to test atomic transfers are working if the I2C controller is part of
a real power domain? Add a fake PMIC?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 12:57 ` Geert Uytterhoeven
@ 2020-06-15 13:08 ` Wolfram Sang
0 siblings, 0 replies; 11+ messages in thread
From: Wolfram Sang @ 2020-06-15 13:08 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
[-- Attachment #1: Type: text/plain, Size: 70 bytes --]
> I meant the one with the "data" var.
Ah, okay. That makes sense.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-15 12:58 ` Geert Uytterhoeven
@ 2020-06-15 13:12 ` Wolfram Sang
0 siblings, 0 replies; 11+ messages in thread
From: Wolfram Sang @ 2020-06-15 13:12 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Ulrich Hecht, Linux-Renesas, Linux I2C
[-- Attachment #1: Type: text/plain, Size: 822 bytes --]
On Mon, Jun 15, 2020 at 02:58:59PM +0200, Geert Uytterhoeven wrote:
> Hi Wolfram,
>
> On Mon, Jun 15, 2020 at 2:48 PM Wolfram Sang <wsa@the-dreams.de> wrote:
> > > Uli: can you check if atomic transfers work with the touchscreen or
> > > codec on Armadillo-800-EVA?
> >
> > Atmoic transfers are used for very late communication (e.g. PMIC).
> > Touchscreens and codecs should be already down, then.
>
> So how to test atomic transfers are working if the I2C controller is part of
> a real power domain? Add a fake PMIC?
Hack something like this into a driver which is executed late:
struct i2c_msg simple_msg = { ... }
adap = i2c_get_adapter(0); // or whatever number
i2c_transfer(adap, simple_msg, 1);
You don't need client struct, you can hardcode some address into
simple_msg directly.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] i2c: sh_mobile: implement atomic transfers
2020-06-14 9:31 ` Wolfram Sang
2020-06-15 10:01 ` Geert Uytterhoeven
@ 2020-06-18 9:53 ` Ulrich Hecht
1 sibling, 0 replies; 11+ messages in thread
From: Ulrich Hecht @ 2020-06-18 9:53 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-renesas-soc, linux-i2c, geert
Thank you for the review.
> On June 14, 2020 11:31 AM Wolfram Sang <wsa@the-dreams.de> wrote:
> > - pm_runtime_get_sync(pd->dev);
> > + if (!pd->atomic_xfer)
> > + pm_runtime_get_sync(pd->dev);
>
> This was a small surprise to me. I assume RPM is disabled that late?
> But can we be sure the clock is on, then?
Turns out it's unnecessary to mess with PM handling here. I assumed that it must not be touched during atomic transfers, but that seems not to be the case. I'll drop that bit in the next revision.
CU
Uli
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-06-18 9:53 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-10 19:33 [PATCH] i2c: sh_mobile: implement atomic transfers Ulrich Hecht
2020-06-14 9:31 ` Wolfram Sang
2020-06-15 10:01 ` Geert Uytterhoeven
2020-06-15 12:48 ` Wolfram Sang
2020-06-15 12:58 ` Geert Uytterhoeven
2020-06-15 13:12 ` Wolfram Sang
2020-06-18 9:53 ` Ulrich Hecht
2020-06-15 9:41 ` Geert Uytterhoeven
2020-06-15 12:50 ` Wolfram Sang
2020-06-15 12:57 ` Geert Uytterhoeven
2020-06-15 13:08 ` Wolfram Sang
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.