From: Jie Deng <jie.deng@intel.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: linux-i2c@vger.kernel.org,
virtualization@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, mst@redhat.com, wsa@kernel.org,
jasowang@redhat.com, wsa+renesas@sang-engineering.com,
andriy.shevchenko@linux.intel.com, conghui.chen@intel.com,
arnd@arndb.de, kblaiech@mellanox.com,
jarkko.nikula@linux.intel.com, Sergey.Semin@baikalelectronics.ru,
rppt@kernel.org, loic.poulain@linaro.org, tali.perry1@gmail.com,
u.kleine-koenig@pengutronix.de, bjorn.andersson@linaro.org,
yu1.wang@intel.com, shuo.a.liu@intel.com,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v5] i2c: virtio: add a virtio i2c frontend driver
Date: Tue, 2 Mar 2021 16:17:48 +0800 [thread overview]
Message-ID: <720f5c0a-032c-b7af-4ca6-cd5adca77c37@intel.com> (raw)
In-Reply-To: <20210302072431.ml4veczbelyjbhkt@vireshk-i7>
On 2021/3/2 15:24, Viresh Kumar wrote:
> On 02-03-21, 14:24, Jie Deng wrote:
>> Not for the full duplex. As Paolo explained in those links.
>> We defined a combined request called "write-read request"
>>
>> "
>> This is when a write is followed by a read: the master
>> starts off the transmission with a write, then sends a second START,
>> then continues with a read from the same address.
> I think above talks about the real I2C protocol at bus level ?
>
>> In theory there's no difference between one multi-segment transaction
>> and many single-segment transactions _in a single-master scenario_.
>>
>> However, it is a plausible configuration to have multiple guests sharing
>> an I2C host device as if they were multiple master.
>>
>> So the spec should provide a way at least to support for transactions with
>> 1 write and 1 read segment in one request to the same address.
>> "
>> From the perspective of specification design, it hopes to provide more
>> choices
>> while from the perspective of specific implementation, we can choose what we
>> need
>> as long as it does not violate the specification.
> That is fine, but what I was not able to understand was how do we get
> to know if we should expect both write and read bufs after the out
> header or only one of them ?
>
> I think I have understood that part now, we need to look at incnt and
> outcnt and make out what kind of transfer we need to do.
>
> - If outcnt == 1 and incnt == 2, then it is read operation.
> - If outcnt == 2 and incnt == 1, then it is write operation.
> - If outcnt == 2 and incnt == 2, then it is read-write operation.
>
> Anything else is invalid. Is my understanding correct here ?
Correct. By checking the sequences of descriptor's R/W in the virtqueue,
You can know the type of request. A simple state machine can be used to
classify in this case.
O I I : read request.
O O I : write request.
O O I I : read-write request.
But if only using the first two types like in this driver, the backend
will be much easier to
implement since the request is fixed to 3 descriptors and we only need
to check the second
descriptor to know the type.
>
>> Since the current Linux driver doesn't use this mechanism. I'm considering
>> to move
>> the "struct virtio_i2c_req" into the driver and use one "buf" instead.
> Linux can very much have its own definition of the structure and so I
> am not in favor of any such structure in the spec as well, it confuses
> people (like me) :).
>
next prev parent reply other threads:[~2021-03-03 1:20 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-01 6:41 [PATCH v5] i2c: virtio: add a virtio i2c frontend driver Jie Deng
2021-03-01 11:54 ` Viresh Kumar
2021-03-01 12:09 ` Andy Shevchenko
2021-03-01 12:10 ` Andy Shevchenko
2021-03-01 15:46 ` Arnd Bergmann
2021-03-02 3:46 ` Viresh Kumar
2021-03-02 3:44 ` Viresh Kumar
2021-03-02 2:21 ` Jie Deng
2021-03-02 3:43 ` Viresh Kumar
2021-03-02 6:28 ` Jie Deng
[not found] ` <b99b18e1-06a5-f526-a885-dc663da3612b@intel.com>
2021-03-02 7:24 ` Viresh Kumar
2021-03-02 8:17 ` Jie Deng [this message]
2021-03-01 12:07 ` Andy Shevchenko
2021-03-02 7:16 ` Jie Deng
2021-03-01 15:19 ` Arnd Bergmann
2021-03-02 4:01 ` Viresh Kumar
2021-03-02 4:22 ` Viresh Kumar
2021-03-02 5:06 ` Jie Deng
2021-03-02 5:16 ` Viresh Kumar
2021-03-02 5:42 ` Jason Wang
[not found] ` <56fdef9a-b373-32f2-6dac-e687caa813c8@intel.com>
2021-03-02 9:51 ` Stefan Hajnoczi
2021-03-02 10:54 ` Arnd Bergmann
2021-03-03 17:48 ` Stefan Hajnoczi
2021-03-02 4:42 ` Viresh Kumar
2021-03-02 5:21 ` Jie Deng
2021-03-02 5:25 ` Viresh Kumar
2021-03-03 7:54 ` Viresh Kumar
2021-03-03 8:46 ` Jie Deng
2021-03-03 9:38 ` Viresh Kumar
2021-03-04 1:47 ` Jie Deng
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=720f5c0a-032c-b7af-4ca6-cd5adca77c37@intel.com \
--to=jie.deng@intel.com \
--cc=Sergey.Semin@baikalelectronics.ru \
--cc=andriy.shevchenko@linux.intel.com \
--cc=arnd@arndb.de \
--cc=bjorn.andersson@linaro.org \
--cc=conghui.chen@intel.com \
--cc=jarkko.nikula@linux.intel.com \
--cc=jasowang@redhat.com \
--cc=kblaiech@mellanox.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=loic.poulain@linaro.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=rppt@kernel.org \
--cc=shuo.a.liu@intel.com \
--cc=tali.perry1@gmail.com \
--cc=u.kleine-koenig@pengutronix.de \
--cc=viresh.kumar@linaro.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=wsa+renesas@sang-engineering.com \
--cc=wsa@kernel.org \
--cc=yu1.wang@intel.com \
/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).