From: Klaus Jensen <its@irrelevant.dk>
To: "Cédric Le Goater" <clg@kaod.org>
Cc: qemu-devel@nongnu.org,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
qemu-arm@nongnu.org, Peter Delevoryas <pdel@fb.com>,
Peter Maydell <peter.maydell@linaro.org>,
Corey Minyard <cminyard@mvista.com>,
Padmakar Kalghatgi <p.kalghatgi@samsung.com>,
Damien Hedde <damien.hedde@greensocs.com>,
Andrew Jeffery <andrew@aj.id.au>, Joel Stanley <joel@jms.id.au>,
Arun Kumar Kashinath Agasar <arun.kka@samsung.com>,
Klaus Jensen <k.jensen@samsung.com>
Subject: Re: [RFC PATCH v2 0/6] hw/i2c: i2c slave mode support
Date: Thu, 2 Jun 2022 10:21:48 +0200 [thread overview]
Message-ID: <YphzHGNYErSMEfPw@apples> (raw)
In-Reply-To: <6e0eb197-25c2-6b1e-2c19-f93597e29cff@kaod.org>
[-- Attachment #1: Type: text/plain, Size: 5404 bytes --]
On Jun 2 09:52, Cédric Le Goater wrote:
> On 6/1/22 23:08, Klaus Jensen wrote:
> > From: Klaus Jensen <k.jensen@samsung.com>
> >
> > Hi all,
> >
> > This RFC series adds I2C "slave mode" support for the Aspeed I2C
>
> I think you can remove the RFC prefix.
>
> > controller as well as the necessary infrastructure in the i2c core to
> > support this.
> >
> > v2 changes
> > ~~~~~~~~~~
> > I finally got around to working on this again. I'm sorry for not
> > bringing a v2 to the table earlier.
> >
> > Mad props to Peter and Jonathan for putting this series to work and
> > pushing it forward! Thanks!
> >
> > This series is based off Cédric's aspeed-7.1 tree, so it includes the
> > register fields. This is all "old register mode", but Peter seems to
> > have added support in new mode.
> >
> > There are some loose ends of course, i.e send_async doesn't handle
> > broadcast and asynchronous slaves being sent stuff can't nack. But I
> > wanted to get some feedback on the interface before I tackle that.
> >
> > This series
> > ~~~~~~~~~~~
> > Patch 1 and 2 are small Aspeed I2C changes/additions.
> >
> > Patch 3 adds support for multiple masters in the i2c core, allowing
> > slaves to master the bus and (safely) issue i2c_send/recv().
> >
> > Patch 4 adds an asynchronous send i2c_send_async(I2CBus *, uint8) on the
> > bus that must be paired with an explicit ack using i2c_ack(I2CBus *). We
> > have previously discussed how we wanted to handle the issue that some
> > slaves implement this and some do not. Using a QOM interface was up, but
> > couldn't figure out a good way to do it. I ended up decided against it
> > since I believe this have to be a run-time check anyway. The problem is
> > that a slave can master the bus and try to communicate with *anyone* on
> > the bus - and there is no reason why we should only allow asynchronous
> > slaves on the bus in that case, or whatever we would want to do when
> > devices are plugged. So, instead, the current master can issue an
> > i2c_start_send() and if that fails (because it isnt implemented by the
> > target slave) it can either bail out or use i2c_start_send_async() if it
> > itself supports it. This works the other way around as well of course,
> > but it is probably simpler to handle slaves that respond to
> > i2c_start_send(). This approach relies on adding a new i2c_event, which
> > is why a bunch of other devices needs changes in their event handling.
> >
> > Patch 5 adds *partial* slave mode functionality to the emulated Aspeed
> > I2C controller, that is, it only supports asynchronous sends started by
> > another slave that is currently mastering the bus. No asynchronous
> > receive.
>
> If there are no objections, I think this is a good way to move forward
> and improve this initial implementation when the need arises.
>
There is an outstanding issue with the SLAVE_ADDR_RX_MATCH interrupt bit
(bit 7). Remember from my first series I had a workaround to make sure
it wasnt masked.
I posted this upstream to linux
https://lore.kernel.org/lkml/20220602054842.122271-1-its@irrelevant.dk/
Not sure if that is the right way to fix it. You mentioned something
about "fixing" a mask on the ast2600?
But with the above patch, all works an intended and no "workaround"
required.
> > Finally, patch 6 adds an example device using this new API. The device
> > is a simple "echo" device that upon being sent a set of bytes uses the
> > first byte as the address of the slave to echo to.
> >
> > With this combined I am able to boot up Linux on an emulated Aspeed 2600
> > evaluation board and have the i2c echo device write into a Linux slave
> > EEPROM. Assuming the echo device is on address 0x42:
> >
> > # echo slave-24c02 0x1064 > /sys/bus/i2c/devices/i2c-15/new_device
> > i2c i2c-15: new_device: Instantiated device slave-24c02 at 0x64
> > # i2cset -y 15 0x42 0x64 0x00 0xaa i
> > # hexdump /sys/bus/i2c/devices/15-1064/slave-eeprom
> > 0000000 ffaa ffff ffff ffff ffff ffff ffff ffff
> > 0000010 ffff ffff ffff ffff ffff ffff ffff ffff
> > *
> > 0000100
>
> I have started working on buildroot images :
>
> https://github.com/legoater/buildroot/commits/aspeed
>
> The resulting files are quite small :
>
> $ ll output/images/
> total 86040
> drwxr-xr-x 2 legoater legoater 4096 Jun 1 20:01 ./
> drwxrwxr-x 6 legoater legoater 4096 Jun 1 19:40 ../
> -rwxr-xr-x 1 legoater legoater 36837 Jun 1 20:01 aspeed-ast2600-evb.dtb*
> -rw-r--r-- 1 legoater legoater 67108864 Jun 1 20:01 flash.img
> -rw-r--r-- 1 legoater legoater 6682796 Jun 1 20:01 image.itb
> -rw-r--r-- 1 legoater legoater 1846 Jun 1 20:01 image.its
> -rw-r--r-- 1 legoater legoater 3168768 Jun 1 20:01 rootfs.cpio
> -rw-r--r-- 1 legoater legoater 1026660 Jun 1 20:01 rootfs.cpio.xz
> -rw-r--r-- 1 legoater legoater 3788800 Jun 1 20:01 rootfs.tar
> -rw-r--r-- 1 legoater legoater 653777 Jun 1 20:00 u-boot.bin
> -rw-r--r-- 1 legoater legoater 5617280 Jun 1 20:01 zImage
>
> I will probably host them on GH and we could use them under avocado
> to extend the tests.
>
>
> They should boot real HW. I will submit the defconfigs to buildroot
> after more tests and cleanups.
>
Nice!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2022-06-02 8:22 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-01 21:08 [RFC PATCH v2 0/6] hw/i2c: i2c slave mode support Klaus Jensen
2022-06-01 21:08 ` [RFC PATCH v2 1/6] hw/i2c/aspeed: rework raise interrupt trace event Klaus Jensen
2022-06-02 6:49 ` Cédric Le Goater
2022-06-02 6:52 ` Klaus Jensen
2022-06-01 21:08 ` [RFC PATCH v2 2/6] hw/i2c/aspeed: add DEV_ADDR in old register mode Klaus Jensen
2022-06-02 7:30 ` Cédric Le Goater
2022-06-02 7:34 ` Klaus Jensen
2022-06-01 21:08 ` [RFC PATCH v2 3/6] hw/i2c: support multiple masters Klaus Jensen
2022-06-01 22:00 ` Corey Minyard
2022-06-01 21:08 ` [RFC PATCH v2 4/6] hw/i2c: add asynchronous send Klaus Jensen
2022-06-01 22:05 ` Corey Minyard
2022-06-02 7:32 ` Cédric Le Goater
2022-06-02 7:35 ` Klaus Jensen
2022-06-01 21:08 ` [RFC PATCH v2 5/6] hw/i2c/aspeed: add slave device in old register mode Klaus Jensen
2022-06-01 21:08 ` [RFC PATCH v2 6/6] hw/misc: add a toy i2c echo device [DO NOT PULL] Klaus Jensen
2022-06-02 7:37 ` Cédric Le Goater
2022-06-02 7:52 ` [RFC PATCH v2 0/6] hw/i2c: i2c slave mode support Cédric Le Goater
2022-06-02 8:21 ` Klaus Jensen [this message]
2022-06-02 13:50 ` Cédric Le Goater
2022-06-02 14:29 ` Jae Hyun Yoo
2022-06-02 15:40 ` Cédric Le Goater
2022-06-02 19:19 ` Klaus Jensen
2022-06-03 5:31 ` Cédric Le Goater
2022-06-03 7:07 ` Cédric Le Goater
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=YphzHGNYErSMEfPw@apples \
--to=its@irrelevant.dk \
--cc=Jonathan.Cameron@huawei.com \
--cc=andrew@aj.id.au \
--cc=arun.kka@samsung.com \
--cc=clg@kaod.org \
--cc=cminyard@mvista.com \
--cc=damien.hedde@greensocs.com \
--cc=joel@jms.id.au \
--cc=k.jensen@samsung.com \
--cc=p.kalghatgi@samsung.com \
--cc=pdel@fb.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.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.