Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp5915721ybe; Tue, 10 Sep 2019 10:42:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqy4gqK49+jUtoVZOfCCNhXUcCaCsuYARp8fEBxtWI61XKx0cvdqt16cvigIoedl55gMjr9b X-Received: by 2002:a17:906:f282:: with SMTP id gu2mr26112706ejb.198.1568137370356; Tue, 10 Sep 2019 10:42:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568137370; cv=none; d=google.com; s=arc-20160816; b=brijpq7vBMs4gXK+UWXNvAcMd7HW16IObLPYYeO45C6xhf96uTfzvwGh07gbIQNBAg U0PcLoVdn3N/3EhsejsR7QwdP1V1gItcS1Yx/hEbjKqhYesvB8TwMAvzQuh8pMPkdbox cpVmHq6g4fflJZoQUXB1ytOVy0OkZuwM0pd/u6LqsZ7O5r0PjxJpeq+wLpaKc8ew+ToM rtDgycG+9s9OXSugOI6ouyE5DY2Z8fYWtm27O7ONmHXHQgbzifDJl9J/bF9CHGgKWVPJ ad5V0GVaVf6Y2BwNYue/FUto4gLLDMBPoftpkBDVP3ttwsU9mOPczlC/1gTJCrg6O5du NTZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=o2deoqoKqOZhbeVQggsHfwevY/IxIkPojQpt0keLlT0=; b=KXGQbAmSUujuLesSv8ZuoEaiPqDQx5nsgDCArA9IsZGv9ZEu45HOTQ5g8TxTFDEr+Z h7e9ZWppgYdBmC9nal5cWp2SQisWM6JCpX4uPubLq1ueAa3/ni/KjBc27EMaQmnvx8Uf QfBZ4NIIo0GcCUNwd41YVX4+AI8AQ94akG6ZZEzC9FAb3gc7aau/C5yfwzCJjx9B7tB/ xW3uhkNTWsBDu9brWmsgMHcI1ylSHwD1tU1+R1nsXQm7qWcHzvlpXkScqJU3+t2aNmI9 vmcxW59JzwvmteLMSpPzcNAxXr8ocMu03Isuqxze3uPM7bTu91y4vIwbl5rpeeCl9ozn W2ZA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w8si9635532ejb.266.2019.09.10.10.42.25; Tue, 10 Sep 2019 10:42:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437152AbfIJRke (ORCPT + 99 others); Tue, 10 Sep 2019 13:40:34 -0400 Received: from hostingweb31-40.netsons.net ([89.40.174.40]:34541 "EHLO hostingweb31-40.netsons.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2436916AbfIJRke (ORCPT ); Tue, 10 Sep 2019 13:40:34 -0400 Received: from [148.69.85.38] (port=22750 helo=[192.168.5.132]) by hostingweb31.netsons.net with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92) (envelope-from ) id 1i7k7v-007JEr-Id; Tue, 10 Sep 2019 19:40:27 +0200 Subject: Re: [RFC,v2 2/6] i2c: add I2C Address Translator (ATR) support To: Vladimir Zapolskiy , jacopo mondi , Wolfram Sang , Peter Rosin Cc: linux-media@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Rob Herring , Mark Rutland , Sakari Ailus , Hans Verkuil , Laurent Pinchart , Kieran Bingham References: <20190723203723.11730-1-luca@lucaceresoli.net> <20190723203723.11730-3-luca@lucaceresoli.net> <20190901143101.humomdehy5ee73sk@vino> <1fb71437-eaa2-99a7-885f-63ee769969aa@mleia.com> From: Luca Ceresoli Message-ID: <2f883643-6af3-4e34-cf2b-f65fed9392a1@lucaceresoli.net> Date: Tue, 10 Sep 2019 18:40:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <1fb71437-eaa2-99a7-885f-63ee769969aa@mleia.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - hostingweb31.netsons.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lucaceresoli.net X-Get-Message-Sender-Via: hostingweb31.netsons.net: authenticated_id: luca@lucaceresoli.net X-Authenticated-Sender: hostingweb31.netsons.net: luca@lucaceresoli.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Vladimir, On 09/09/19 05:56, Vladimir Zapolskiy wrote: > Hi Luca, Jacopo, Wolfram, Peter, > > On 09/08/2019 11:45 PM, Vladimir Zapolskiy wrote: >> Hi Luca, Jacopo, Wolfram, Peter, >> >> On 09/01/2019 05:31 PM, jacopo mondi wrote: >>> Hi Luca, >>> thanks for keep pushing this series! I hope we can use part of this >>> for the (long time) on-going GMSL work... >>> >>> I hope you will be patient enough to provide (another :) overview >>> of this work during the BoF Wolfram has organized at LPC for the next >>> week. >>> >>> In the meantime I would have some comments after having a read at the >>> series and trying to apply its concept to GMSL >>> >> >> I won't attend the LPC, however I would appreciate if you book some >> time to review my original / alternative implementation of the TI >> DS90Ux9xx I2C bridge device driver. >> >> For your convenience the links to the driver are given below: >> * dt bindings: https://lore.kernel.org/lkml/20181012060314.GU4939@dell/T/#mead5ea226550b >> * driver code: https://lore.kernel.org/lkml/20181012060314.GU4939@dell/T/#m2fe3664c5f884 >> * usage example: https://lore.kernel.org/lkml/20181012060314.GU4939@dell/T/#m56c146f5decdc >> >> The reasons why my driver is better/more flexible/more functional are >> discussed earlier, please let me know, if you expect anything else >> from me to add, also I would be happy to get a summary of your offline >> discussion. > > I forgot to repeat my main objection against Luca's approach, the TI > DS90Ux9xx I2C bridge driver does not require to call i2c_add_adapter() > or register a new mux/bus and then do run select/deselect in runtime to > overcome the created handicap. Whether the ser/deser drivers should or not instantiate an adapter depends on whether the child I2C bus is a separate bus or it's "the same bus" as the parent bus. Which in turn is not obvious, and depends on how you look at it. On one hand, the child bus looks like it is the same as the parent bus because transactions on the child bus also happen on the parent bus (bus not the other way around). On the other hand the child bus also looks like a separate bus because it is electrically separated from the parent bus, it can have a different speed, and devices on one child bus cannot talk with devices on another child bus under the same ser/deser. The way you modeled it has the advantage of not requiring a runtime rewriting of slave addresses. Thas's what I implemented in i2c_atr_map_msgs(), I don't love the fact that it happens at every iteration, but its runtime cost is negligible compared to I2C speeds. On the other hand I'm not sure how your approach would work if you have an i2c bridge behind another i2c bridge (see the "ATR behind another ATR" case mentioned by Peter). By contrast, adding an adapter for each child bus has its advantages. I didn't have to write code to instantiate the devices, letting the i2c core do it. Also, as child busses show up as real busses it's possible to instantiate devices from userspace just like any standard i2c bus with: echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-4/new_device and devices will be assigned an alias and be usable normally. Finally, there is no need to call select()/deselect() in runtime. Those callbacks are optional, and I'm probably removing them in a future iteration as I'm more and more convinced they are not needed at all. -- Luca