linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Shanker R Donthineni <sdonthineni@nvidia.com>
To: Bjorn Helgaas <helgaas@kernel.org>,
	Amey Narkhede <ameynarkhede03@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>, <alex.williamson@redhat.com>,
	Raphael Norwitz <raphael.norwitz@nutanix.com>,
	<linux-pci@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<kw@linux.com>, Sinan Kaya <okaya@kernel.org>,
	Len Brown <lenb@kernel.org>,
	"Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Mika Westerberg <mika.westerberg@linux.intel.com>
Subject: Re: [PATCH v15 7/9] PCI: Setup ACPI fwnode early and at the same time with OF
Date: Fri, 13 Aug 2021 22:35:46 -0500	[thread overview]
Message-ID: <0ed12600-a6d4-f6f1-6250-a8ff9a3625a6@nvidia.com> (raw)
In-Reply-To: <20210813230428.GA2745285@bjorn-Precision-5520>

Hi Bjorn,

On 8/13/21 6:04 PM, Bjorn Helgaas wrote:
> External email: Use caution opening links or attachments
>
>
> [+cc Ben, Mika]
>
> On Thu, Aug 05, 2021 at 09:59:15PM +0530, Amey Narkhede wrote:
>> From: Shanker Donthineni <sdonthineni@nvidia.com>
>>
>> The pci_dev objects are created through two mechanisms 1) during PCI
>> bus scan and 2) from I/O Virtualization. The fwnode in pci_dev object
>> is being set at different places depends on the type of firmware used,
>> device creation mechanism, and acpi_pci_bridge_d3().
>>
>> The software features which have a dependency on ACPI fwnode properties
>> and need to be handled before device_add() will not work. One use case,
>> the software has to check the existence of _RST method to support ACPI
>> based reset method.
>>
>> This patch does the two changes in order to provide fwnode consistently.
>>  - Set ACPI and OF fwnodes from pci_setup_device().
>>  - Remove pci_set_acpi_fwnode() in acpi_pci_bridge_d3().
>>
>> After this patch, ACPI/OF firmware properties are visible at the same
>> time during the early stage of pci_dev setup. And also call sites should
>> be able to use firmware agnostic functions device_property_xxx() for the
>> early PCI quirks in the future.
>>
>> Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
>> Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
>> ---
>>  drivers/pci/pci-acpi.c | 1 -
>>  drivers/pci/probe.c    | 7 ++++---
>>  2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
>> index eaddbf701759..dae021322b3f 100644
>> --- a/drivers/pci/pci-acpi.c
>> +++ b/drivers/pci/pci-acpi.c
>> @@ -952,7 +952,6 @@ static bool acpi_pci_bridge_d3(struct pci_dev *dev)
>>               return false;
>>
>>       /* Assume D3 support if the bridge is power-manageable by ACPI. */
>> -     pci_set_acpi_fwnode(dev);
>>       adev = ACPI_COMPANION(&dev->dev);
> I *think* the Root Port code farther down in this function is also now
> unnecessary:
>
>   acpi_pci_bridge_d3(...)
>   {
>     ...
>     root = pcie_find_root_port(dev);
>     adev = ACPI_COMPANION(&root->dev);
>     if (root == dev) {
>       /*
>        * It is possible that the ACPI companion is not yet bound
>        * for the root port so look it up manually here.
>        */
>       if (!adev && !pci_dev_is_added(root))
>         adev = acpi_pci_find_companion(&root->dev);
>     }
>
> Since we're now setting the ACPI_COMPANION for every pci_dev long
> before we get here, I think this could now be simplified to something
> like this:
>
>   acpi_pci_bridge_d3(...)
>   {
>     if (!dev->is_hotplug_bridge)
>       return false;
>
>     adev = ACPI_COMPANION(&dev->dev);
>     if (adev && acpi_device_power_manageable(adev))
>       return true;
>
>     root = pcie_find_root_port(dev);
>     if (!root)
>       return false;
>
>     adev = ACPI_COMPANION(&root->dev);
>     if (!adev)
>       return false;
>
>     rc = acpi_dev_get_property(dev, "HotPlugSupportInD3",
>                                ACPI_TYPE_INTEGER, &val);
>     if (rc < 0)
>       return false;
>
>     return val == 1;
>   }

Agree, thanks for your suggestion. Yes, it can be simplified too.
Can I do something like this using the unified device property API?

static bool acpi_pci_bridge_d3(struct pci_dev *dev)
{
        struct acpi_device *adev;
        struct pci_dev *root;
        u8 val;

        if (!dev->is_hotplug_bridge)
                return false;

        adev = ACPI_COMPANION(&dev->dev);
        if (adev && acpi_device_power_manageable(adev))
                return true;

        root = pcie_find_root_port(dev);
        if (!root)
                return false;

        if (device_property_read_u8(&root->dev, "HotPlugSupportInD3", &val))
                return false;

        return val == 1;
}

> acpi_pci_bridge_d3() was added by 26ad34d510a8 ("PCI / ACPI: Whitelist
> D3 for more PCIe hotplug ports") [1], so I cc'd Mika in case he has
> any comment.
>
>>       if (adev && acpi_device_power_manageable(adev))
>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>> index 379e85037d9b..15a6975d3757 100644
>> --- a/drivers/pci/probe.c
>> +++ b/drivers/pci/probe.c
>> @@ -1789,6 +1789,9 @@ int pci_setup_device(struct pci_dev *dev)
>>       dev->error_state = pci_channel_io_normal;
>>       set_pcie_port_type(dev);
>>
>> +     pci_set_of_node(dev);
>> +     pci_set_acpi_fwnode(dev);
> Is there a reason why you moved pci_set_of_node() from
> pci_scan_device() to here?  I think it's a good change; I'm just
> curious if you tripped over something that required it.

There is no specific reason and not required but setting both the fwnodes
at the same time improves the code readability and provides consistent
device properties for callers.

> The pci_set_of_node() was added to pci_scan_device() by 98d9f30c820d
> ("pci/of: Match PCI devices to OF nodes dynamically") [2], so I cc'd
> Ben just in case there's some reason he didn't put it in
> pci_setup_device() in the first place.
>

Thanks,
Shanker Donthineni


  reply	other threads:[~2021-08-14  3:36 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-05 16:29 [PATCH v15 0/9] PCI: Expose and manage PCI device reset Amey Narkhede
2021-08-05 16:29 ` [PATCH v15 1/9] PCI: Cache PCIe FLR capability Amey Narkhede
2021-08-09 11:13   ` Raphael Norwitz
2021-08-05 16:29 ` [PATCH v15 2/9] PCI: Add pcie_reset_flr to follow calling convention of other reset methods Amey Narkhede
2021-08-09 11:15   ` Raphael Norwitz
2021-08-05 16:29 ` [PATCH v15 3/9] PCI: Add new array for keeping track of ordering of " Amey Narkhede
2021-08-09 11:18   ` Raphael Norwitz
2021-08-05 16:29 ` [PATCH v15 4/9] PCI: Remove reset_fn field from pci_dev Amey Narkhede
2021-08-05 16:29 ` [PATCH v15 5/9] PCI: Allow userspace to query and set device reset mechanism Amey Narkhede
2021-08-09 11:23   ` Raphael Norwitz
2021-08-05 16:29 ` [PATCH v15 6/9] PCI: Define a function to set ACPI_COMPANION in pci_dev Amey Narkhede
2021-08-05 16:29 ` [PATCH v15 7/9] PCI: Setup ACPI fwnode early and at the same time with OF Amey Narkhede
2021-08-13 23:04   ` Bjorn Helgaas
2021-08-14  3:35     ` Shanker R Donthineni [this message]
2021-08-14  4:10       ` Bjorn Helgaas
2021-08-14 16:16         ` Shanker R Donthineni
2021-08-16 17:07           ` Bjorn Helgaas
2021-08-05 16:29 ` [PATCH v15 8/9] PCI: Add support for ACPI _RST reset method Amey Narkhede
2021-08-05 16:29 ` [PATCH v15 9/9] PCI: Change the type of probe argument in reset functions Amey Narkhede
2021-08-14 14:05   ` Shanker R Donthineni
2021-08-12 13:03 ` [PATCH v15 0/9] PCI: Expose and manage PCI device reset Shanker R Donthineni

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=0ed12600-a6d4-f6f1-6250-a8ff9a3625a6@nvidia.com \
    --to=sdonthineni@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=ameynarkhede03@gmail.com \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=helgaas@kernel.org \
    --cc=kw@linux.com \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=okaya@kernel.org \
    --cc=raphael.norwitz@nutanix.com \
    --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 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).