All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Scally <djrscally@gmail.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>, lenb@kernel.org
Cc: linux-acpi@vger.kernel.org,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>
Subject: Re: acpi_device_notify() binding devices that don't seem like they should be bound
Date: Wed, 9 Dec 2020 09:54:11 +0000	[thread overview]
Message-ID: <9a9c176c-8991-cd12-d2da-34114a9d1aca@gmail.com> (raw)
In-Reply-To: <858bb2b0-e2b4-f0d4-0088-7106fec3cb8f@gmail.com>



On 08/12/2020 23:48, Daniel Scally wrote:
> Hello again
> 
> On 06/12/2020 00:00, Daniel Scally wrote:
>> INT3472:08 is not an acpi device that seems to be a good candidate for
>> binding to 0000:00:00.0; it just happens to be the first child of
>> PNP0A08:08 that shares _ADR 0 and has _STA not set to 0.
>>
>> The comment within acpi_find_child_device() does imply that there should
>> only ever be a single child device with the same _ADR as the parent, so
>> I suppose this is possibly a case of poor ACPI tables confusing the code
>> a bit; given both PNP0A08:00 and _all_ of the INT3472 devices have _ADR
>> set to zero (as indeed do the machine's cameras), but I'm not
>> knowledgeable enough on ACPI to know whether that's to spec (or at least
>> accounted for). The INT3472 devices themselves do not actually seem to
>> represent a physical device (atleast, not in this case...sometimes they
>> do...), rather they're a dummy being used to simply group some GPIO
>> lines under a common _CRS. The sensors are called out as dependent on
>> these "devices" in their _DEP method, which is already a horrible way of
>> doing things so more broken ACPI being to blame wouldn't surprise me.
>>
>> The other problem that that raises is that there seems to be _no_ good
>> candidate for binding to 0000:00:00.0 that's a child of PNP0A08:00 - the
>> only devices sharing _ADR 0 and having _STA != 0 are those two INT3472
>> entries and the machine's cameras.
> 
> After some more reading, I'm pretty confident that this is the problem
> now - I.E. that those devices having _ADR of 0 is what's causing this
> issue to materialise, and that those values should be set to something
> more appropriate. Still unsure about the best approach to fix it though
> from a kernel point of view; there doesn't seem to be anything out of
> whack in the logic, and I believe (correct me if I'm wrong) there can be
> legitimate instances of child devices sharing _ADR=0 with the parent, so
> the problem becomes how to identify the illegitimate instances so that
> they can be discarded. My experience in this is really limited, so I
> lean towards the conclusion that hard-coding exceptions somewhere might
> be necessary to handle this without resorting to patched ACPI tables.
> Whether that's within acpi_find_child_device() to prevent matching
> occurring there, or else setting the adev->pnp.bus_address to some
> alternate value after creation to compensate.
> 
> I recognise that that's a horrible answer though, so I'm really hoping
> that someone has an idea for how to handle this in a better way.

Oops, missed this crucial line from the spec:

"A device object must contain either an _HID object or an _ADR object,
but should not contain both."

And here's the Device declaration for these objects:

        Device (PMI0)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Name (_HID, "INT3472")  // _HID: Hardware ID
            Name (_CID, "INT3472")  // _CID: Compatible ID
            Name (_DDN, "INCL-CRDD")  // _DDN: DOS Device Name
            Name (_UID, Zero)  // _UID: Unique ID

So that's the broken part rather than the _ADR value of 0 specifically.
That at least gives a jumping off point for some logic to fix rather
than a hardcoded anything, so I'll try to work out a nice way to handle
that (probably ignoring adevs in acpi_find_child_device() with addr=0
and a valid _HID) and submit a patch.

Sorry for the noise, think I'm good now :)


  reply	other threads:[~2020-12-09  9:55 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-06  0:00 acpi_device_notify() binding devices that don't seem like they should be bound Daniel Scally
2020-12-08 23:48 ` Daniel Scally
2020-12-09  9:54   ` Daniel Scally [this message]
2020-12-09 15:43     ` Rafael J. Wysocki
2020-12-09 16:20       ` Daniel Scally
2020-12-09 16:53         ` Rafael J. Wysocki
2020-12-10  0:06           ` Daniel Scally
2020-12-10 13:53             ` Rafael J. Wysocki
2020-12-10 15:02               ` Daniel Scally
2020-12-10 16:05                 ` Rafael J. Wysocki
2020-12-10 16:07                   ` Daniel Scally
2020-12-10 16:59                     ` Rafael J. Wysocki
2020-12-10 22:46                       ` Daniel Scally
2020-12-11 16:58                         ` Rafael J. Wysocki

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=9a9c176c-8991-cd12-d2da-34114a9d1aca@gmail.com \
    --to=djrscally@gmail.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    /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.