All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Ceresoli <luca@lucaceresoli.net>
To: Daniel Mack <daniel@zonque.org>, Wolfram Sang <wsa@the-dreams.de>
Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
	linux-i2c@vger.kernel.org, alsa-devel@alsa-project.org,
	devicetree@vger.kernel.org, linux-clk@vger.kernel.org,
	mturquette@baylibre.com, sboyd@kernel.org, robh+dt@kernel.org,
	broonie@kernel.org, lee.jones@linaro.org, lars@metafoo.de,
	pascal.huerst@gmail.com
Subject: Re: [PATCH 07/10] i2c: Add driver for AD242x bus controller
Date: Tue, 17 Dec 2019 09:35:39 +0100	[thread overview]
Message-ID: <4f2e1332-eac3-e54d-5de8-b84a76cb1a34@lucaceresoli.net> (raw)
In-Reply-To: <482316ef-775a-cb7b-015e-e00463503e6b@zonque.org>

Hi Daniel,

On 15/12/19 21:27, Daniel Mack wrote:
> Hi,
> 
> Thanks for the review!
> 
> On 12/12/2019 5:33 pm, Wolfram Sang wrote:
>> Hi Luca,
>>
>> thanks for the review!
>>
>>> good, but I think there's a problem in this function. A "normal"
>>> master_xfer function issues a repeated start between one msg and the
>>> next one, at least in the typical case where all msgs have the same
>>> slave address. Your implementation breaks repeated start. At first sight
>>> we might need more complex code here to coalesce all consecutive msgs
>>> with the same address into a single i2c_transfer() call.
>>
>> Note that it is by far the standard case that all messages in a transfer
>> have the same client address (99,999%?). But technically, this is not a
>> requirement and the repeated start on the bus is totally independent of
>> the addresses used. It is just a master wanting to send without being
>> interrupted by another master.
> 
> I'm not quite sure I understand.
> 
> Let's assume the following setup. An i2c client (some driver code) is
> sending a list of messages to the a2b xfer function, which in turn is
> logically connected to a 'real' i2c bus master that'll put the data on
> the wire.
> 
> The a2b code has to tell the 'master node' the final destination of the
> payload by programming registers on its primary i2c address, and then
> forwards the messages to its secondary i2c address. The layout of the
> messages don't change, and neither do the flags; i2c messages are being
> sent as i2c messages, except their addresses are changed, a bit like NAT
> in networking. That procedure is described on page 3-4 of the TRM,
> "Remote Peripheral I2C Accesses".
> 
> The 'real' i2c master that handles the hardware bus is responsible for
> adding start conditions, and as the messages as such are untouched, I
> believe it should do the right thing. The code in my xfer functions
> merely suppresses reprogramming remote addresses by remembering the last
> one that was used, but that is independent of the start conditions on
> the wire.

My concern is not about the start condition, it's about the *repeated*
start condition.

The first question is whether the A2B chips can do it. What if the host
processor sets a slave chip address and then issues two messages
separated by a repeated start condition? Will the slave transceiver emit
a repeated start condition too?

If the answer is "yes", then the issue moves to the driver code. A
master xfer function receives a set of messages that are normally
emitted with a repeated start between each other. But ad242x_i2c_xfer()
splits the msgs and calls i2c_transfer_buffer_flags() with one msg at a
time. i2c_transfer_buffer_flags() then will emit a stop condition.

This is not necessarily a problem, unless multi-master is used, but if
there are limitations or deviations from the standard they should at
least be well known and documented.

-- 
Luca

WARNING: multiple messages have this Message-ID (diff)
From: Luca Ceresoli <luca@lucaceresoli.net>
To: Daniel Mack <daniel@zonque.org>, Wolfram Sang <wsa@the-dreams.de>
Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org,
	lars@metafoo.de, sboyd@kernel.org, mturquette@baylibre.com,
	linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
	robh+dt@kernel.org, broonie@kernel.org,
	linux-i2c@vger.kernel.org, pascal.huerst@gmail.com,
	lee.jones@linaro.org, linux-clk@vger.kernel.org
Subject: Re: [alsa-devel] [PATCH 07/10] i2c: Add driver for AD242x bus controller
Date: Tue, 17 Dec 2019 09:35:39 +0100	[thread overview]
Message-ID: <4f2e1332-eac3-e54d-5de8-b84a76cb1a34@lucaceresoli.net> (raw)
In-Reply-To: <482316ef-775a-cb7b-015e-e00463503e6b@zonque.org>

Hi Daniel,

On 15/12/19 21:27, Daniel Mack wrote:
> Hi,
> 
> Thanks for the review!
> 
> On 12/12/2019 5:33 pm, Wolfram Sang wrote:
>> Hi Luca,
>>
>> thanks for the review!
>>
>>> good, but I think there's a problem in this function. A "normal"
>>> master_xfer function issues a repeated start between one msg and the
>>> next one, at least in the typical case where all msgs have the same
>>> slave address. Your implementation breaks repeated start. At first sight
>>> we might need more complex code here to coalesce all consecutive msgs
>>> with the same address into a single i2c_transfer() call.
>>
>> Note that it is by far the standard case that all messages in a transfer
>> have the same client address (99,999%?). But technically, this is not a
>> requirement and the repeated start on the bus is totally independent of
>> the addresses used. It is just a master wanting to send without being
>> interrupted by another master.
> 
> I'm not quite sure I understand.
> 
> Let's assume the following setup. An i2c client (some driver code) is
> sending a list of messages to the a2b xfer function, which in turn is
> logically connected to a 'real' i2c bus master that'll put the data on
> the wire.
> 
> The a2b code has to tell the 'master node' the final destination of the
> payload by programming registers on its primary i2c address, and then
> forwards the messages to its secondary i2c address. The layout of the
> messages don't change, and neither do the flags; i2c messages are being
> sent as i2c messages, except their addresses are changed, a bit like NAT
> in networking. That procedure is described on page 3-4 of the TRM,
> "Remote Peripheral I2C Accesses".
> 
> The 'real' i2c master that handles the hardware bus is responsible for
> adding start conditions, and as the messages as such are untouched, I
> believe it should do the right thing. The code in my xfer functions
> merely suppresses reprogramming remote addresses by remembering the last
> one that was used, but that is independent of the start conditions on
> the wire.

My concern is not about the start condition, it's about the *repeated*
start condition.

The first question is whether the A2B chips can do it. What if the host
processor sets a slave chip address and then issues two messages
separated by a repeated start condition? Will the slave transceiver emit
a repeated start condition too?

If the answer is "yes", then the issue moves to the driver code. A
master xfer function receives a set of messages that are normally
emitted with a repeated start between each other. But ad242x_i2c_xfer()
splits the msgs and calls i2c_transfer_buffer_flags() with one msg at a
time. i2c_transfer_buffer_flags() then will emit a stop condition.

This is not necessarily a problem, unless multi-master is used, but if
there are limitations or deviations from the standard they should at
least be well known and documented.

-- 
Luca
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2019-12-17  8:35 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-09 18:35 [PATCH 00/10] mfd: Add support for Analog Devices A2B transceiver Daniel Mack
2019-12-09 18:35 ` [alsa-devel] " Daniel Mack
2019-12-09 18:35 ` Daniel Mack
2019-12-09 18:35 ` [PATCH 01/10] dt-bindings: mfd: Add documentation for ad242x Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-19 19:29   ` Rob Herring
2019-12-19 19:29     ` [alsa-devel] " Rob Herring
2019-12-09 18:35 ` [PATCH 02/10] dt-bindings: i2c: Add documentation for ad242x i2c controllers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2020-01-08  3:45   ` Rob Herring
2020-01-08  3:45     ` [alsa-devel] " Rob Herring
2019-12-09 18:35 ` [PATCH 03/10] dt-bindings: gpio: Add documentation for ad242x GPIO controllers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-09 18:35 ` [PATCH 03/10] dt-bindings: gpio: Add documentation for AD242x " Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-09 18:35 ` [PATCH 04/10] dt-bindings: clock: Add documentation for AD242x clock providers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-24  7:32   ` Stephen Boyd
2019-12-24  7:32     ` [alsa-devel] " Stephen Boyd
2019-12-24  7:32     ` Stephen Boyd
2019-12-09 18:35 ` [PATCH 05/10] dt-bindings: sound: Add documentation for AD242x codecs Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-09 18:35 ` [PATCH 06/10] mfd: Add core driver for AD242x A2B transceivers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-17 13:39   ` Lee Jones
2019-12-17 13:39     ` [alsa-devel] " Lee Jones
2019-12-17 13:46     ` Lee Jones
2019-12-17 13:46       ` [alsa-devel] " Lee Jones
2019-12-17 19:36       ` Daniel Mack
2019-12-17 19:36         ` [alsa-devel] " Daniel Mack
2019-12-17 19:24     ` Daniel Mack
2019-12-17 19:24       ` [alsa-devel] " Daniel Mack
2019-12-18 11:20       ` Luca Ceresoli
2019-12-18 11:20         ` [alsa-devel] " Luca Ceresoli
2019-12-17 19:16   ` Pierre-Louis Bossart
2019-12-17 19:16     ` Pierre-Louis Bossart
2019-12-18  9:40     ` Daniel Mack
2019-12-18  9:40       ` Daniel Mack
2019-12-09 18:35 ` [PATCH 07/10] i2c: Add driver for AD242x bus controller Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-12 16:11   ` Luca Ceresoli
2019-12-12 16:11     ` [alsa-devel] " Luca Ceresoli
2019-12-12 16:33     ` Wolfram Sang
2019-12-12 16:33       ` [alsa-devel] " Wolfram Sang
2019-12-15 20:27       ` Daniel Mack
2019-12-15 20:27         ` [alsa-devel] " Daniel Mack
2019-12-17  8:35         ` Luca Ceresoli [this message]
2019-12-17  8:35           ` Luca Ceresoli
2019-12-17 18:17           ` Daniel Mack
2019-12-17 18:17             ` [alsa-devel] " Daniel Mack
2019-12-09 18:35 ` [PATCH 08/10] gpio: Add driver for AD242x GPIO controllers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-09 18:35 ` [PATCH 09/10] clk: Add support for AD242x clock output providers Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-24  7:46   ` Stephen Boyd
2019-12-24  7:46     ` [alsa-devel] " Stephen Boyd
2019-12-24  7:46     ` Stephen Boyd
2019-12-09 18:35 ` [PATCH 10/10] ASoC: Add codec component for AD242x nodes Daniel Mack
2019-12-09 18:35   ` [alsa-devel] " Daniel Mack
2019-12-09 18:35   ` Daniel Mack
2019-12-16 14:23   ` Mark Brown
2019-12-16 14:23     ` [alsa-devel] " Mark Brown
2019-12-17 19:28   ` Pierre-Louis Bossart
2019-12-17 19:28     ` Pierre-Louis Bossart
2019-12-18  9:49     ` Daniel Mack
2019-12-18  9:49       ` Daniel Mack
2019-12-18 15:32       ` Pierre-Louis Bossart
2019-12-18 15:32         ` Pierre-Louis Bossart
2019-12-20  8:24         ` Daniel Mack
2019-12-20 15:18           ` Pierre-Louis Bossart
2019-12-17 19:29 ` [alsa-devel] [PATCH 00/10] mfd: Add support for Analog Devices A2B transceiver Pierre-Louis Bossart
2019-12-17 19:29   ` Pierre-Louis Bossart
2019-12-18  9:53   ` Daniel Mack
2019-12-18  9:53     ` Daniel Mack

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=4f2e1332-eac3-e54d-5de8-b84a76cb1a34@lucaceresoli.net \
    --to=luca@lucaceresoli.net \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=daniel@zonque.org \
    --cc=devicetree@vger.kernel.org \
    --cc=lars@metafoo.de \
    --cc=lee.jones@linaro.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=pascal.huerst@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    --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.