From: "Adamski, Krzysztof (Nokia - PL/Wrocław)" <krzysztof.adamski@nokia.com>
To: Wolfram Sang <wsa@the-dreams.de>
Cc: Peter Rosin <peda@axentia.se>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>
Subject: Re: Two separate i2c transfers
Date: Fri, 15 May 2020 11:46:29 +0200 [thread overview]
Message-ID: <e2681cda-d609-428e-4752-24cd0962a740@nokia.com> (raw)
In-Reply-To: <20200515092042.GA2077@ninjato>
Hi Wolfram
W dniu 15.05.2020 o 11:20, Wolfram Sang pisze:
>
>> So this does not really solve my problem - even if we do get the lock
>> by calling select(), we will simply release it as soon as our
>> i2c_transfer() is finished (and will let the other master take it,
>> breaking atomicity of the two operations I need to perform on target
>> device) and this is exactly what I need to avoid.
>
> I was assuming that once you have the lock from the arbitrator you can
> be sure that the other master is not active and, thus, you maybe don't
> need to read the status register at all? But I am probably wrong here.
>
The problem here is that the i2c-mux framework will only take lock for one transfer i2c and will always drop this lock
after this one transfer. We can send multiple messages in one transaction and keep the lock for the whole time but what
I actually needs is to send multiple transactions, not just messages. We are programming flash memory of an target
device and we have to poll for some status bits before we can send more data, for example.
So there are two possibilities:
1. I could lock the arbitrator for the whole time the programming is done. This way I could indeed skip reading status
register.
2. We could lock the arbitrator, read the status register of the target device to check if programming is already
running, if it is not, then start it (which will set the bit in status register). Those to operations have to be atomic
so I have to hold the lock between the two transactions.
None of the two options can be done currently as mux layer will call deselect (releasing the lock) after each
transaction and we need more than one transaction (as described above). We need to use the 2nd option, however, as this
lets 2nd system still talk to some other devices on the downstream bus while the 1st one is performing the flashing of
the target device for example while we're waiting for target device to be ready for next page of data) but this is not
that relevant in this discussion.
Best regards,
Krzysztof Adamski
next prev parent reply other threads:[~2020-05-15 9:46 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-14 12:41 Two separate i2c transfers Adamski, Krzysztof (Nokia - PL/Wrocław)
2020-05-14 14:50 ` Wolfram Sang
2020-05-15 7:04 ` Adamski, Krzysztof (Nokia - PL/Wrocław)
2020-05-15 7:53 ` Wolfram Sang
2020-05-15 8:51 ` Adamski, Krzysztof (Nokia - PL/Wrocław)
2020-05-15 9:20 ` Wolfram Sang
2020-05-15 9:24 ` Peter Rosin
2020-05-15 9:31 ` Wolfram Sang
2020-05-15 9:46 ` Adamski, Krzysztof (Nokia - PL/Wrocław) [this message]
2020-05-15 8:02 ` Peter Rosin
2020-05-15 8:36 ` Adamski, Krzysztof (Nokia - PL/Wrocław)
2020-05-15 21:19 ` Peter Rosin
2020-05-17 21:32 ` Peter Rosin
2020-05-19 12:59 ` Adamski, Krzysztof (Nokia - PL/Wrocław)
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=e2681cda-d609-428e-4752-24cd0962a740@nokia.com \
--to=krzysztof.adamski@nokia.com \
--cc=linux-i2c@vger.kernel.org \
--cc=peda@axentia.se \
--cc=wsa@the-dreams.de \
/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.