All of lore.kernel.org
 help / color / mirror / Atom feed
From: mathias.nyman@linux.intel.com (Mathias Nyman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] usb: host: xhci-plat: allow sysdev to inherit from ACPI
Date: Tue, 5 Sep 2017 14:21:08 +0300	[thread overview]
Message-ID: <59AE88A4.8070206@linux.intel.com> (raw)
In-Reply-To: <1504202057-23634-1-git-send-email-awallis@codeaurora.org>

On 31.08.2017 20:54, Adam Wallis wrote:
> Currently, xhci_plat is not set up properly when the parent device is an
> ACPI node. The conditions that xhci_plat_probe should satisfy are
>
> 1. xhci_plat comes from firmware
> 2. xhci_plat is child of a device from firmware (dwc3-plat)
> 3. xhci_plat is grandchild of a pci device (dwc3-pci)
>
> Case 2 is covered when the child is an OF node (by checking
> sysdev->parent->of_node), however, an ACPI parent will return NULL in
> the of_node check and will thus not result in sysdev being set to
> sysdev->parent
>
> [   17.591549] xhci-hcd: probe of xhci-hcd.6.auto failed with error -5
>
> This change adds a check for ACPI to completely allow for condition 2.
> This is done by first checking if the parent node is of type ACPI (e.g.,
> dwc3-plat) and set sysdev to sysdev->parent if either of the two
> following conditions are met:
>
> 1: If fwnode is empty (in the case that platform_device_add_properties
> was not called on the allocated platform device)
> 2: fwnode exists but is not of type ACPI (this would happen if
> platform_device_add_properties was called on the allocated device.
> Instead of type FWNODE_ACPI, you would end up with FWNODE_PDATA)
>
> Cc: stable at vger.kernel.org # 4.12.x
> Signed-off-by: Adam Wallis <awallis@codeaurora.org>
> ---

Thang Q. Nguyen  (in CC) proposed a patch for the same issue earlier,

I just replied to his patch with a new proposal (added you to CC)

Basically replace it all with:

-       sysdev = &pdev->dev;
-       if (sysdev->parent && !sysdev->of_node && sysdev->parent->of_node)
-               sysdev = sysdev->parent;
-#ifdef CONFIG_PCI
-       else if (sysdev->parent && sysdev->parent->parent &&
-                sysdev->parent->parent->bus == &pci_bus_type)
-               sysdev = sysdev->parent->parent;
-#endif
+
+       for (sysdev = &pdev->dev; sysdev; sysdev = sysdev->parent) {
+               if (is_of_node(sysdev->fwnode) ||
+                   is_acpi_device_node(sysdev->fwnode))
+                       break;
+       #ifdef CONFIG_PCI
+               else if (sysdev->bus == &pci_bus_type)
+                       break;
+       #endif
+       }
+
+       if (!sysdev)
+               sysdev = &pdev->dev;

-Mathias

WARNING: multiple messages have this Message-ID (diff)
From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Adam Wallis <awallis@codeaurora.org>,
	linux-arm-kernel@lists.infradead.org,
	Mathias Nyman <mathias.nyman@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Arnd Bergmann <arnd@arndb.de>,
	linux-usb@vger.kernel.org, balbi@kernel.org,
	vivek.gautam@codeaurora.org, jackp@codeaurora.org,
	stable <stable@vger.kernel.org>
Cc: timur@codeaurora.org, "Thang Q. Nguyen" <tqnguyen@apm.com>
Subject: Re: [PATCH] usb: host: xhci-plat: allow sysdev to inherit from ACPI
Date: Tue, 5 Sep 2017 14:21:08 +0300	[thread overview]
Message-ID: <59AE88A4.8070206@linux.intel.com> (raw)
In-Reply-To: <1504202057-23634-1-git-send-email-awallis@codeaurora.org>

On 31.08.2017 20:54, Adam Wallis wrote:
> Currently, xhci_plat is not set up properly when the parent device is an
> ACPI node. The conditions that xhci_plat_probe should satisfy are
>
> 1. xhci_plat comes from firmware
> 2. xhci_plat is child of a device from firmware (dwc3-plat)
> 3. xhci_plat is grandchild of a pci device (dwc3-pci)
>
> Case 2 is covered when the child is an OF node (by checking
> sysdev->parent->of_node), however, an ACPI parent will return NULL in
> the of_node check and will thus not result in sysdev being set to
> sysdev->parent
>
> [   17.591549] xhci-hcd: probe of xhci-hcd.6.auto failed with error -5
>
> This change adds a check for ACPI to completely allow for condition 2.
> This is done by first checking if the parent node is of type ACPI (e.g.,
> dwc3-plat) and set sysdev to sysdev->parent if either of the two
> following conditions are met:
>
> 1: If fwnode is empty (in the case that platform_device_add_properties
> was not called on the allocated platform device)
> 2: fwnode exists but is not of type ACPI (this would happen if
> platform_device_add_properties was called on the allocated device.
> Instead of type FWNODE_ACPI, you would end up with FWNODE_PDATA)
>
> Cc: stable@vger.kernel.org # 4.12.x
> Signed-off-by: Adam Wallis <awallis@codeaurora.org>
> ---

Thang Q. Nguyen  (in CC) proposed a patch for the same issue earlier,

I just replied to his patch with a new proposal (added you to CC)

Basically replace it all with:

-       sysdev = &pdev->dev;
-       if (sysdev->parent && !sysdev->of_node && sysdev->parent->of_node)
-               sysdev = sysdev->parent;
-#ifdef CONFIG_PCI
-       else if (sysdev->parent && sysdev->parent->parent &&
-                sysdev->parent->parent->bus == &pci_bus_type)
-               sysdev = sysdev->parent->parent;
-#endif
+
+       for (sysdev = &pdev->dev; sysdev; sysdev = sysdev->parent) {
+               if (is_of_node(sysdev->fwnode) ||
+                   is_acpi_device_node(sysdev->fwnode))
+                       break;
+       #ifdef CONFIG_PCI
+               else if (sysdev->bus == &pci_bus_type)
+                       break;
+       #endif
+       }
+
+       if (!sysdev)
+               sysdev = &pdev->dev;

-Mathias

  reply	other threads:[~2017-09-05 11:21 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-31 17:54 [PATCH] usb: host: xhci-plat: allow sysdev to inherit from ACPI Adam Wallis
2017-08-31 17:54 ` Adam Wallis
2017-09-05 11:21 ` Mathias Nyman [this message]
2017-09-05 11:21   ` Mathias Nyman

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=59AE88A4.8070206@linux.intel.com \
    --to=mathias.nyman@linux.intel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.