devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hector Martin <marcan@marcan.st>
To: "Mark Brown" <broonie@kernel.org>,
	"Martin Povišer" <povik+lin@cutebit.org>
Cc: Liam Girdwood <lgirdwood@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	alsa-devel@alsa-project.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Mark Kettenis <kettenis@openbsd.org>,
	Sven Peter <sven@svenpeter.dev>
Subject: Re: [RFC PATCH 0/5] Apple Macs machine-level ASoC driver
Date: Thu, 31 Mar 2022 22:28:56 +0900	[thread overview]
Message-ID: <ea0e8079-a184-996f-47ac-3e00b63166c9@marcan.st> (raw)
In-Reply-To: <YkWfziQzprEsWL72@sirena.org.uk>

On 31/03/2022 21.34, Mark Brown wrote:
> On Thu, Mar 31, 2022 at 02:04:44AM +0200, Martin Povišer wrote:
> 
>> I put together a machine-level ASoC driver for recent Apple Macs (the
>> ones with ARM64 SoCs) and want to gauge opinions.
> 
> This would be a bit easier to review with a description of the hardware.
> 
>> Commit 2 adds a new ASoC card method (filter_controls) to let the card
>> prevent some codec kcontrols from being visible to userspace. For example
>> the TAS2770 speaker amp driver would be happy to expose TDM slot selection
>> and ISENSE/VSENSE enables which is ridiculous. I am all ears on how to
>> make the patch acceptable to upstream.
> 
> The broad issue here is that what you consider ridiculous someone else
> might have some bright ideas for configuring dynamically - if things are
> being exposed for dynamic configuration it's probably because someone
> wanted them, if the control is genuinely useless then it should just be
> removed.  Rather than getting in the way of people's policy arguments
> about how to set things we expose them to userspace and let userspace
> worry about it, usually with the help of UCM files.  The general
> userspace model is that people interact with their sound server more
> than the hardware card.  This is also helpful for people developing use
> cases, it means they're not having to get the kernel rebuilt to tune
> things.

The problem with this model is that, in particular in the case of
speaker amps, incorrect settings can cause your speakers to blow up.
This has been a longstanding problem with ASoC platforms (I should know,
I *melted* the speakers in a Chromebook by toggling the wrong alsamixer
control once, it even warped the external case, all without making any
audible noise).

It's the kernel's job to ensure that broadly exposed user controls are
safe and cannot be used to cause hardware damage; if that is possible,
then that's a kernel security vulnerability worthy of a CVE, in my
opinion. I think this idea of exposing what is effectively raw codec
chip registers as ALSA controls that is so popular these days was a
terrible idea from the start, and only makes some sense within the world
of highly integrated vendor-controlled embedded platforms running
kiosk-style software with no user control. It is completely unsuitable
for a desktop Linux system, since it means users *will* destroy their
hardware accidentally. So, some way or another, whatever is exposed has
to be sanitized so that it can't go outside the envelope of what is safe
for the hardware design. That cannot be known at the level of codec
chips and speaker amp chips; it requires platform integration knowledge.

That knowledge is what is (intended to be) encoded in the macaudio
driver. It's supposed to know how to drive the underlying codec chips
and disable access to things that don't make any sense on the platform,
and expose controls to the user that are reasonable for what a user
would want to do on that specific hardware platform, and no more.

-- 
Hector Martin (marcan@marcan.st)
Public Key: https://mrcn.st/pub

  parent reply	other threads:[~2022-03-31 13:29 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-31  0:04 [RFC PATCH 0/5] Apple Macs machine-level ASoC driver Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 1/5] dt-bindings: sound: Add Apple Macs sound system Martin Povišer
2022-03-31  6:43   ` Krzysztof Kozlowski
2022-03-31  6:57     ` Martin Povišer
2022-03-31  8:17       ` Krzysztof Kozlowski
2022-03-31  8:23         ` Martin Povišer
2022-03-31  8:26           ` Krzysztof Kozlowski
2022-03-31  0:04 ` [RFC PATCH 2/5] HACK: ASoC: Add card->filter_controls hook Martin Povišer
2022-03-31 11:34   ` Mark Brown
2022-03-31  0:04 ` [RFC PATCH 3/5] HACK: ASoC: Tolerate N-cpus-to-M-codecs links Martin Povišer
2022-04-04 12:28   ` Mark Brown
2022-04-22 14:06     ` Martin Povišer
2022-04-25 12:25       ` Mark Brown
2022-04-25 12:34         ` Martin Povišer
2022-04-25 12:55           ` Mark Brown
2022-04-25 13:11             ` Martin Povišer
2022-04-25 13:46               ` Mark Brown
2022-04-25 13:55                 ` Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 4/5] ASoC: Introduce snd_soc_of_get_dai_link_cpus Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 5/5] ASoC: Add macaudio machine driver Martin Povišer
2022-03-31 11:59   ` Mark Brown
2022-03-31 12:08     ` Martin Povišer
2022-03-31 12:16       ` Martin Povišer
2022-03-31 12:56       ` Mark Brown
2022-03-31 12:34 ` [RFC PATCH 0/5] Apple Macs machine-level ASoC driver Mark Brown
2022-03-31 13:28   ` Martin Povišer
2022-03-31 14:18     ` Mark Brown
2022-03-31 15:04       ` Martin Povišer
2022-03-31 15:36         ` Mark Brown
2022-04-22 10:43           ` Martin Povišer
2022-04-22 11:19             ` Mark Brown
2022-04-22 11:28               ` Martin Povišer
2022-04-22 11:33                 ` Mark Brown
2022-04-22 11:44                   ` Martin Povišer
2022-04-22 12:22                     ` Mark Brown
2022-04-22 12:36                       ` Martin Povišer
2022-04-22 12:44                         ` Mark Brown
2022-04-22 12:53                           ` Martin Povišer
2022-04-22 13:06                             ` Mark Brown
2022-04-22 13:59                               ` Martin Povišer
2022-03-31 13:28   ` Hector Martin [this message]
2022-03-31 14:33     ` Mark Brown
2022-04-05  9:31 ` (subset) " Mark Brown

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=ea0e8079-a184-996f-47ac-3e00b63166c9@marcan.st \
    --to=marcan@marcan.st \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=kettenis@openbsd.org \
    --cc=krzk+dt@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=povik+lin@cutebit.org \
    --cc=robh+dt@kernel.org \
    --cc=sven@svenpeter.dev \
    --cc=tiwai@suse.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;
as well as URLs for NNTP newsgroup(s).