Linux Sound subsystem development
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
To: Charles Keepax <ckeepax@opensource.cirrus.com>
Cc: broonie@kernel.org, rafael@kernel.org,
	yung-chuan.liao@linux.intel.com, peter.ujfalusi@linux.intel.com,
	shumingf@realtek.com, lgirdwood@gmail.com,
	linux-sound@vger.kernel.org, patches@opensource.cirrus.com
Subject: Re: [PATCH 09/15] ASoC: SDCA: Add UMP buffer helper functions
Date: Thu, 11 Sep 2025 14:33:46 +0200	[thread overview]
Message-ID: <4ddd1987-427d-409a-af89-7b505df5fa34@linux.dev> (raw)
In-Reply-To: <aMGbz3l2n0q9Fhkh@opensource.cirrus.com>


>>> Second question would probably be could we get a little more of a
>>> concrete example of what you are looking for. Options I can see
>>> would be to add the options of using a blocking type API, maybe
>>> something like:
>>>
>>> sdca_ump_notify_owner() - this could probably be part of
>>>                           sdca_ump_get_owner_host()
>>> sdca_ump_wait_for_owner()
>>> sdca_ump_send_message_and_wait() - this would like be a wrapper
>>>                                    for a write and the first two.
>>>
>>> But I am a little hesitant to switch the FDL process over this,
>>> has to start firing off work queues etc. and everything gets a
>>> little more complex.
>>>
>>> Or one could add something like:
>>>
>>> sdca_ump_cancel_timeout()
>>> sdca_ump_schedule_timeout(callback, timeout)
>>>
>>> This probably integrates nicer with the IRQ driven way the FDL
>>> is implemented at the moment.
>>>
>>> Would something like one of those be what you are looking for? Or
>>> are you really looking for a much higher level API with some sort
>>> of message queue? Although if going in that way I get very very
>>> nervous about all the SDCA weirdness.
>>
>> Oh I wasn't thinking at all of a message queue with a
>> higher-level API, more something along the lines of the SOF/cAVS
>> IPC based on doorbells.
> 
> I am not super familiar with the inner workings of SOF but at
> first glance it does look like exactly the thing I was hoping to
> avoid :-)
> 
>> You probably want an async mechanism where the set_owner()
>> returns immediately and is followed by a wait with a configurable
>> timeout. I don't really get the nuance between your two proposals
>> but they go in the direction I had in mind.
> 
> The difference was intended to be the first is a blocking API
> (ie. function returns on either owner being transferred back to
> you or the timeout expires). The second was intended to be async
> and based on a callback ie. returns immediately and the callback
> is called when the timeout expires so you can run whatever error
> handling you want.
> 
>> That said, I do think you'll have to deal with workqueues,
>> not sure how else to deal with the protocol. If you have an
>> interrupt that requires a follow-up UMP-based check, things
>> could get messy with an interrupt blocking another one. We had
>> similar problems with the SOF IPC and for the standard SoundWire
>> interrupts. Best to keep interrupt handlers simple and signal
>> stuff to do for workqueues.
> 
> Definitely agree that blocking in the IRQs is not what we want,
> hence my previous comments about preferring the callback based
> option.

ok

> For the most part HID and FDL are extremely device led
> processes. We don't really need to keep super complex state on the
> host side as we don't initiate anything, we are just responding
> to what the device wants to do. To my mind keeping complex state
> on the host side likely increases the chance something goes wrong.
> 
> I will have a think see if I can come up with a nice way to
> integrate a timeout to individual UMP owner transfers, but I am
> not exactly sure how much value this adds for the currently
> implemented features. HID won't use this, and FDL already has a
> timeout for the FDL process, so one still sees if it failed and
> as you can see the status and response pairs debugging should be
> fairly easy.
> 
> Once these timeouts exist we have to pick values for them,
> because SDCA is a huge huge fan of asking you to wait for
> something but not saying for how long. If you have any thoughts
> on this that would be appreciated too, but mostly I will just
> pluck some vaguely reasonable sounding values as I did for the
> existing FDL timeouts.

The SDCA 1.0 spec defines DisCo properties for UMP timeouts, just do a search for "ownership-transition-max-delay". Table 139 page 236 defines this property specifically for XUs and hence the low-level protocol FDL is based on.

The description reads:

"
The maximum time allowed for Device to change the
ownership from Device to Host in an Rx UMP when Host
Software is waiting for the owner to change back to Host.
"

As usual it's quite possible that platform firmware is broken with bad values, but the design intent was to provide a timeout value for software to use. Ignoring these properties doesn't seem quite right to me...



  reply	other threads:[~2025-09-11 12:35 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-05 14:31 [PATCH 00/15] Add SDCA UMP/FDL support Charles Keepax
2025-09-05 14:31 ` [PATCH 01/15] regmap: sdw-mbq: Don't assume the regmap device is the SoundWire slave Charles Keepax
2025-09-08 11:35   ` Pierre-Louis Bossart
2025-09-08 12:38     ` Charles Keepax
2025-09-05 14:31 ` [PATCH 02/15] ASoC: SDCA: Add manual PM runtime gets to IRQ handlers Charles Keepax
2025-09-08 11:42   ` Pierre-Louis Bossart
2025-09-08 13:31     ` Charles Keepax
2025-09-08 14:15       ` Charles Keepax
2025-09-09 12:56       ` Pierre-Louis Bossart
2025-09-05 14:31 ` [PATCH 03/15] ASoC: SDCA: Pass SoundWire slave to HID Charles Keepax
2025-09-05 14:31 ` [PATCH 04/15] ASoC: SDCA: Pass device register map from IRQ alloc to handlers Charles Keepax
2025-09-08 11:49   ` Pierre-Louis Bossart
2025-09-08 12:56     ` Charles Keepax
2025-09-09 13:05       ` Pierre-Louis Bossart
2025-09-09 16:43         ` Charles Keepax
2025-09-05 14:31 ` [PATCH 05/15] ASoC: SDCA: Update externally_requested flag to cover all requests Charles Keepax
2025-09-05 14:31 ` [PATCH 06/15] ASoC: SDCA: Factor out a helper to find SDCA IRQ data Charles Keepax
2025-09-05 14:31 ` [PATCH 07/15] ASoC: SDCA: Rely less on the ASoC component in IRQ handling Charles Keepax
2025-09-08 10:27   ` Liao, Bard
2025-09-08 12:56     ` Charles Keepax
2025-09-08 14:43       ` Charles Keepax
2025-09-09  1:42         ` Liao, Bard
2025-09-09  8:56           ` Charles Keepax
2025-09-10  1:33             ` Liao, Bard
2025-09-08 11:55   ` Pierre-Louis Bossart
2025-09-08 12:58     ` Charles Keepax
2025-09-05 14:31 ` [PATCH 08/15] ASoC: SDCA: Force some SDCA Controls to be volatile Charles Keepax
2025-09-05 14:31 ` [PATCH 09/15] ASoC: SDCA: Add UMP buffer helper functions Charles Keepax
2025-09-08 12:02   ` Pierre-Louis Bossart
2025-09-08 13:15     ` Charles Keepax
2025-09-09 13:14       ` Pierre-Louis Bossart
2025-09-09 16:52         ` Charles Keepax
2025-09-10 12:09           ` Pierre-Louis Bossart
2025-09-10 13:37             ` Charles Keepax
2025-09-10 14:29               ` Pierre-Louis Bossart
2025-09-10 15:39                 ` Charles Keepax
2025-09-11 12:33                   ` Pierre-Louis Bossart [this message]
2025-09-11 13:07                     ` Charles Keepax
2025-09-12 10:15                       ` Pierre-Louis Bossart
2025-09-12 10:33                         ` Charles Keepax
2025-09-12 11:30                           ` Pierre-Louis Bossart
2025-09-05 14:31 ` [PATCH 10/15] ASoC: SDCA: Add SDCA FDL data parsing Charles Keepax
2025-09-05 14:31 ` [PATCH 11/15] ASoC: SDCA: Add FDL library for XU entities Charles Keepax
2025-09-08 12:14   ` Pierre-Louis Bossart
2025-09-08 13:16     ` Charles Keepax
2025-09-09 13:14       ` Pierre-Louis Bossart
2025-09-05 14:31 ` [PATCH 12/15] ASoC: SDCA: Add XU-specific IRQ processing Charles Keepax
2025-09-05 14:31 ` [PATCH 13/15] ASoC: SDCA: Add completion for FDL start and stop Charles Keepax
2025-09-05 14:31 ` [PATCH 14/15] ASoC: SDCA: Add early IRQ handling Charles Keepax
2025-09-05 14:31 ` [PATCH 15/15] ASoC: SDCA: Add HID button IRQ Charles Keepax

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=4ddd1987-427d-409a-af89-7b505df5fa34@linux.dev \
    --to=pierre-louis.bossart@linux.dev \
    --cc=broonie@kernel.org \
    --cc=ckeepax@opensource.cirrus.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-sound@vger.kernel.org \
    --cc=patches@opensource.cirrus.com \
    --cc=peter.ujfalusi@linux.intel.com \
    --cc=rafael@kernel.org \
    --cc=shumingf@realtek.com \
    --cc=yung-chuan.liao@linux.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