On Thu, Jul 12, 2018 at 10:46 AM, Boris Brezillon <boris.brezillon@xxxxxxxxxxx> wrote: > On Thu, 12 Jul 2018 10:21:40 +0200 Arnd Bergmann <arnd@xxxxxxxx> wrote: >> On Thu, Jul 12, 2018 at 12:09 AM, Boris Brezillon <boris.brezillon@xxxxxxxxxxx> wrote: >> > On Wed, 11 Jul 2018 22:10:26 +0200 Arnd Bergmann <arnd@xxxxxxxx> wrote: >> >> On Wed, Jul 11, 2018 at 7:12 PM, Boris Brezillon <boris.brezillon@xxxxxxxxxxx> wrote: >> >> > On Wed, 11 Jul 2018 17:39:56 +0200 Arnd Bergmann <arnd@xxxxxxxx> wrote: >> >> >> On Wed, Jul 11, 2018 at 4:41 PM, Boris Brezillon <boris.brezillon@xxxxxxxxxxx> wrote: >> >> If we can ignore the case of handing over between two masters that >> we both own, we end up being in just one of two states: >> >> a) currently we are the master >> b) we are not currently the master but have asked the current >> master to transfer ownership back to us. For this, we have to >> know who the current master is of course. >> >> I think that's the simplest case that would work with the specification, >> but it relies on the assumption that the master controlled by Linux >> is always more important than any other master, and that we just >> hand over ownership for as long as the others want it. >> >> If that is not the case, we also need a third state >> >> c) we have handed ownership to another master that is equally >> important, but no i2c device driver is currently trying to talk >> to a device, so we don't need ownership back until a slave driver >> changes state. > > That was the solution I was opting for. > >> >> The main difference between b) and c) that I see would be what >> happens with in-band interrupts. If I understand the specification >> correctly, only the current master receives them, so if you have >> any i2c device that uses interrupts to talk to a Linux driver, we > > ^ you mean i3c here, right? sure >> want to be in b) rather than c). An example of this would be >> an input device on a PC: If the user operateds the keyboard >> or pointer and we have handed off ownership to a sensor hub, >> we never get an input event, right? > > Correct. I guess we could try to regain bus ownership in case we have > IBIs enabled. Or we let the secondary master give the bus back to us > when it sees IBIs it can't handle, as described in section 5.1.7: > > " > Once granted control of the Bus, the Secondary Master maintains > control until another Master is granted Bus control. After the > Secondary Master transitions to the Current Master role it could > encounter Bus management activities besides the data transfers that it > itself initiates. Some examples are the In-Band Interrupt, or the > Hot-Join request. One optional possibility, shown at Section 5.1.7.2, > is that the Secondary Master performs the Current Master’s actions with > the full capabilities of the Main Master. Another optional possibility > is that the Secondary Master, while serving in the Current Master role, > could defer some actions to a more capable Master, as described in > Section 5.1.7.3. > " Ah, so the current master can ask a secondary master to take over again even if the secondary master has not requested to be come the current master? >> > I agree. This being said, moving to a representation where the bus is >> > implicitly represented by the master_controller instance shouldn't be >> > too difficult. So, if you think we should try this approach I can do >> > the modifications in my v6. >> >> I'd say let's wait before you do that change, possibly add a comment >> in there now to remind us of what an alternative would be. > > You mean I should keep the i3c_bus object? I mean the ongoing discussion shouldn't stop you from posting a v6. Arnd