All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Jihong Min <hurryman2212@icloud.com>,
	sashiko-reviews@lists.linux.dev,
	Jihong Min <hurryman2212@gmail.com>
Cc: linux-hwmon@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v5 1/2] usb: xhci-pci: add AMD Promontory 21 PCI glue
Date: Thu, 14 May 2026 18:49:50 -0700	[thread overview]
Message-ID: <a1ada282-ecc4-4b9f-a479-c5bddf25e641@roeck-us.net> (raw)
In-Reply-To: <a90ab332-9f86-4486-8243-07c98e3f7578@icloud.com>

On 5/14/26 06:44, Jihong Min wrote:
> 
> On 5/14/26 22:38, Jihong Min wrote:
>>
>> On 5/14/26 10:20, Guenter Roeck wrote:
>>> On 5/13/26 17:40, sashiko-bot@kernel.org wrote:
>>>> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
>>>> - [High] The Kconfig dependency `depends on USB_XHCI_PCI=y` completely disables PROM21 support for systems where the core driver is built as a module.
>>>> - [Low] Signed integer overflow when calculating the auxiliary device ID.
>>>> -- 
>>>>
>>>> commit 20f4e35b2f88ebe2b8988b4f07fe7cc28199096b
>>>> Author: Jihong Min <hurryman2212@gmail.com>
>>>> Subject: usb: xhci-pci: add AMD Promontory 21 PCI glue
>>>>
>>>> This commit adds a small PCI glue driver for AMD Promontory 21 xHCI
>>>> controllers. It binds the controllers, delegates USB host operation to
>>>> the common xHCI PCI core, and creates an auxiliary device for optional
>>>> temperature sensor support.
>>>>
>>>>> diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
>>>>> --- a/drivers/usb/host/Kconfig
>>>>> +++ b/drivers/usb/host/Kconfig
>>>>
>>>> [ ... ]
>>>>
>>>>> @@ -42,6 +42,26 @@ config USB_XHCI_PCI
>>>>>       depends on USB_PCI
>>>>>       default y
>>>>>   +config USB_XHCI_PCI_PROM21
>>>>> +    bool "AMD Promontory 21 xHCI PCI support"
>>>>> +    depends on X86
>>>>> +    depends on USB_XHCI_PCI=y
>>>>
>>>> Does depending strictly on USB_XHCI_PCI=y cause a configuration regression
>>>> for most distributions where the core driver is configured as a module?
>>>>
>>>> The driver source appears fully capable of being built as a module, using
>>>> module-related macros and module_pci_driver().
>>>>
>>>> If the intent is to prevent an early boot mismatch where xhci-pci is
>>>> built-in but the PROM21 glue is a module, could this instead be a tristate
>>>> option using depends on USB_XHCI_PCI and depends on !(USB_XHCI_PCI=y && m)?
>>>> This would enforce the boot constraint while preserving support for modular
>>>> kernel builds.
>>>>
>>>
>>> That makes sense to me. That would be stronger than using default (which
>>> was my idea of dealing with the problem). Restricting the code to USB_XHCI_PCI=y
>>> seems to be a bit extreme.
>>
>> Hi Guenter,
>>
>> I looked more closely at the Kconfig part of the Sashiko suggestion.
>>
>> The concern itself is valid: the v5 dependency on USB_XHCI_PCI=y is too
>> strict because it prevents the PROM21 PCI glue from being built when
>> USB_XHCI_PCI=m.
>>
>> However, I do not think the suggested expression works as intended:
>>
>>   depends on !(USB_XHCI_PCI=y && m)
>>
>> With Kconfig tristate logic, `m` is a tristate literal, not "this symbol is
>> being built as a module". If USB_XHCI_PCI=y, then:
>>
>>   USB_XHCI_PCI=y && m  => m
>>   !(USB_XHCI_PCI=y && m) => m
>>
>> So the dependency becomes `m`, which limits USB_XHCI_PCI_PROM21 to `m` instead
>> of allowing `y`. That is the opposite of what we need for the built-in
>> xhci-pci case.
>>
>> The combinations I think we want are:
>>
>>   USB_XHCI_PCI=y  -> USB_XHCI_PCI_PROM21=y or n, but not m
>>   USB_XHCI_PCI=m  -> USB_XHCI_PCI_PROM21=m or n
>>   USB_XHCI_PCI=n  -> USB_XHCI_PCI_PROM21=n
>>
>> I see a few possible ways to handle this:
>>
>> 1. Keep USB_XHCI_PCI_PROM21 as a visible tristate:
>>
>>      config USB_XHCI_PCI_PROM21
>>        tristate "AMD Promontory 21 xHCI PCI support"
>>        depends on X86
>>        depends on USB_XHCI_PCI
>>        default USB_XHCI_PCI
>>        select AUXILIARY_BUS
>>
>>    This supports USB_XHCI_PCI=m, but it still lets a user select the unsafe
>>    USB_XHCI_PCI=y / USB_XHCI_PCI_PROM21=m combination.
>>
>> 2. Keep it visible and rely on help text to warn users not to select `m` when
>>    USB_XHCI_PCI=y.
>>
>>    This is simple, but it does not actually prevent the bad combination.
>>
>> 3. Use IS_REACHABLE() in xhci-pci.c instead of IS_ENABLED().
>>
>>    That would prevent built-in xhci-pci from rejecting PROM21 devices when the
>>    PROM21 glue is only available as a module. However, it also means the
>>    PROM21 glue/hwmon path would not be used in that configuration unless the
>>    PCI device is rebound later, so I do not think it is ideal.
>>
>> 4. Make USB_XHCI_PCI_PROM21 a hidden tristate that follows USB_XHCI_PCI:
>>
>>      config USB_XHCI_PCI_PROM21
>>        tristate
>>        depends on X86
>>        depends on USB_XHCI_PCI
>>        default USB_XHCI_PCI
>>        select AUXILIARY_BUS
>>
>>    Then the value follows the common xhci-pci driver:
>>
>>      USB_XHCI_PCI=y  -> USB_XHCI_PCI_PROM21=y
>>      USB_XHCI_PCI=m  -> USB_XHCI_PCI_PROM21=m
>>      USB_XHCI_PCI=n  -> USB_XHCI_PCI_PROM21=n
>>
>>    This prevents the unsafe y/m split while still supporting modular
>>    USB_XHCI_PCI builds. The actual user-visible sensor option remains
>>    SENSORS_PROM21_XHCI.
>>
>> My current preference is option 4, because the PROM21 PCI glue is not really a
>> user-facing feature by itself. It exists so the common xhci-pci driver can hand
>> PROM21 devices to the PROM21-specific glue and so the optional hwmon driver can
>> bind through the auxiliary device. The user-visible part remains the hwmon
>> sensor driver.
>>
>> Does that sound reasonable to you, or would you prefer one of the other
>> approaches?
>>
>> Thanks,
>> Jihong
>>
> One follow-up to my previous mail:
> 
> If we go with option 4 and make USB_XHCI_PCI_PROM21 a hidden tristate
> symbol, I think its help text should probably be removed as well, since the
> symbol would no longer have a user-visible prompt.
> 
Agreed.

> The user-visible option would remain SENSORS_PROM21_XHCI, where the hwmon
> sensor help text can stay.
> 
> Does that sound right?
> 
Yes.

Thanks,
Guenter


  reply	other threads:[~2026-05-15  1:49 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 21:39 [PATCH v5 0/2] AMD Promontory 21 xHCI temperature sensor support Jihong Min
2026-05-12 21:39 ` [PATCH v5 1/2] usb: xhci-pci: add AMD Promontory 21 PCI glue Jihong Min
2026-05-14  0:40   ` sashiko-bot
2026-05-14  1:20     ` Guenter Roeck
2026-05-14 13:38       ` Jihong Min
2026-05-14 13:44         ` Jihong Min
2026-05-15  1:49           ` Guenter Roeck [this message]
2026-05-14 14:29       ` Jihong Min
2026-05-14 19:22         ` Guenter Roeck
2026-05-12 21:39 ` [PATCH v5 2/2] hwmon: add AMD Promontory 21 xHCI temperature sensor support Jihong Min
2026-05-14  1:00   ` sashiko-bot
2026-05-14  1:13     ` Guenter Roeck
2026-05-12 21:49 ` [PATCH v5 0/2] " Jihong Min
2026-05-13 14:48 ` Mario Limonciello

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=a1ada282-ecc4-4b9f-a479-c5bddf25e641@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=hurryman2212@gmail.com \
    --cc=hurryman2212@icloud.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.