All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajat Jain <rajatja@google.com>
To: Marcel Holtmann <marcel@holtmann.org>,
	Johan Hedberg <johan.hedberg@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"David S. Miller" <davem@davemloft.net>,
	Dmitry Torokhov <dtor@chromium.org>,
	Rajat Jain <rajatja@google.com>,
	Alex Hung <alex.hung@canonical.com>,
	linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-usb@vger.kernel.org, netdev@vger.kernel.org
Cc: rajatxjain@gmail.com, dtor@google.com, raghuram.hegde@intel.com,
	chethan.tumkur.narayan@intel.com, sukumar.ghorai@intel.com
Subject: [PATCH v5 2/4] usb: assign ACPI companions for embedded USB devices
Date: Wed, 23 Jan 2019 12:57:23 -0800	[thread overview]
Message-ID: <20190123205725.239661-2-rajatja@google.com> (raw)
In-Reply-To: <20190123205725.239661-1-rajatja@google.com>

From: Dmitry Torokhov <dtor@chromium.org>

USB devices permanently connected to USB ports may be described in ACPI
tables and share ACPI devices with ports they are connected to. See [1]
for details.

This will allow us to describe sideband resources for devices, such as,
for example, hard reset line for BT USB controllers.

[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/other-acpi-namespace-objects#acpi-namespace-hierarchy-and-adr-for-embedded-usb-devices

Signed-off-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Rajat Jain <rajatja@google.com> (changed how we get the usb_port)
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Tested-by: Sukumar Ghorai <sukumar.ghorai@intel.com>
---
v5: same as v4
v4: Add Acked-by and Tested-by in signatures.
v3: same as v1
v2: same as v1

 drivers/usb/core/usb-acpi.c | 44 +++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
index 8ff73c83e8e8..9043d7242d67 100644
--- a/drivers/usb/core/usb-acpi.c
+++ b/drivers/usb/core/usb-acpi.c
@@ -200,30 +200,56 @@ static struct acpi_device *
 usb_acpi_find_companion_for_device(struct usb_device *udev)
 {
 	struct acpi_device *adev;
+	struct usb_port *port_dev;
+	struct usb_hub *hub;
+
+	if (!udev->parent) {
+		/* root hub is only child (_ADR=0) under its parent, the HC */
+		adev = ACPI_COMPANION(udev->dev.parent);
+		return acpi_find_child_device(adev, 0, false);
+	}
 
-	if (!udev->parent)
+	hub = usb_hub_to_struct_hub(udev->parent);
+	if (!hub)
 		return NULL;
 
-	/* root hub is only child (_ADR=0) under its parent, the HC */
-	adev = ACPI_COMPANION(udev->dev.parent);
-	return acpi_find_child_device(adev, 0, false);
+	/*
+	 * This is an embedded USB device connected to a port and such
+	 * devices share port's ACPI companion.
+	 */
+	port_dev = hub->ports[udev->portnum - 1];
+	return usb_acpi_get_companion_for_port(port_dev);
 }
 
-
 static struct acpi_device *usb_acpi_find_companion(struct device *dev)
 {
 	/*
-	 * In the ACPI DSDT table, only usb root hub and usb ports are
-	 * acpi device nodes. The hierarchy like following.
+	 * The USB hierarchy like following:
+	 *
 	 * Device (EHC1)
 	 *	Device (HUBN)
 	 *		Device (PR01)
 	 *			Device (PR11)
 	 *			Device (PR12)
+	 *				Device (FN12)
+	 *				Device (FN13)
 	 *			Device (PR13)
 	 *			...
-	 * So all binding process is divided into two parts. binding
-	 * root hub and usb ports.
+	 * where HUBN is root hub, and PRNN are USB ports and devices
+	 * connected to them, and FNNN are individualk functions for
+	 * connected composite USB devices. PRNN and FNNN may contain
+	 * _CRS and other methods describing sideband resources for
+	 * the connected device.
+	 *
+	 * On the kernel side both root hub and embedded USB devices are
+	 * represented as instances of usb_device structure, and ports
+	 * are represented as usb_port structures, so the whole process
+	 * is split into 2 parts: finding companions for devices and
+	 * finding companions for ports.
+	 *
+	 * Note that we do not handle individual functions of composite
+	 * devices yet, for that we would need to assign companions to
+	 * devices corresponding to USB interfaces.
 	 */
 	if (is_usb_device(dev))
 		return usb_acpi_find_companion_for_device(to_usb_device(dev));
-- 
2.20.1.321.g9e740568ce-goog


WARNING: multiple messages have this Message-ID (diff)
From: Rajat Jain <rajatja@google.com>
To: Marcel Holtmann <marcel@holtmann.org>,
	Johan Hedberg <johan.hedberg@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"David S. Miller" <davem@davemloft.net>,
	Dmitry Torokhov <dtor@chromium.org>,
	Rajat Jain <rajatja@google.com>,
	Alex Hung <alex.hung@canonical.com>,
	linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-usb@vger.kernel.org, netdev@vger.kernel.org
Cc: rajatxjain@gmail.com, dtor@google.com, raghuram.hegde@intel.com,
	chethan.tumkur.narayan@intel.com, sukumar.ghorai@intel.com
Subject: [v5,2/4] usb: assign ACPI companions for embedded USB devices
Date: Wed, 23 Jan 2019 12:57:23 -0800	[thread overview]
Message-ID: <20190123205725.239661-2-rajatja@google.com> (raw)

From: Dmitry Torokhov <dtor@chromium.org>

USB devices permanently connected to USB ports may be described in ACPI
tables and share ACPI devices with ports they are connected to. See [1]
for details.

This will allow us to describe sideband resources for devices, such as,
for example, hard reset line for BT USB controllers.

[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/other-acpi-namespace-objects#acpi-namespace-hierarchy-and-adr-for-embedded-usb-devices

Signed-off-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Rajat Jain <rajatja@google.com> (changed how we get the usb_port)
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Tested-by: Sukumar Ghorai <sukumar.ghorai@intel.com>
---
v5: same as v4
v4: Add Acked-by and Tested-by in signatures.
v3: same as v1
v2: same as v1

 drivers/usb/core/usb-acpi.c | 44 +++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
index 8ff73c83e8e8..9043d7242d67 100644
--- a/drivers/usb/core/usb-acpi.c
+++ b/drivers/usb/core/usb-acpi.c
@@ -200,30 +200,56 @@ static struct acpi_device *
 usb_acpi_find_companion_for_device(struct usb_device *udev)
 {
 	struct acpi_device *adev;
+	struct usb_port *port_dev;
+	struct usb_hub *hub;
+
+	if (!udev->parent) {
+		/* root hub is only child (_ADR=0) under its parent, the HC */
+		adev = ACPI_COMPANION(udev->dev.parent);
+		return acpi_find_child_device(adev, 0, false);
+	}
 
-	if (!udev->parent)
+	hub = usb_hub_to_struct_hub(udev->parent);
+	if (!hub)
 		return NULL;
 
-	/* root hub is only child (_ADR=0) under its parent, the HC */
-	adev = ACPI_COMPANION(udev->dev.parent);
-	return acpi_find_child_device(adev, 0, false);
+	/*
+	 * This is an embedded USB device connected to a port and such
+	 * devices share port's ACPI companion.
+	 */
+	port_dev = hub->ports[udev->portnum - 1];
+	return usb_acpi_get_companion_for_port(port_dev);
 }
 
-
 static struct acpi_device *usb_acpi_find_companion(struct device *dev)
 {
 	/*
-	 * In the ACPI DSDT table, only usb root hub and usb ports are
-	 * acpi device nodes. The hierarchy like following.
+	 * The USB hierarchy like following:
+	 *
 	 * Device (EHC1)
 	 *	Device (HUBN)
 	 *		Device (PR01)
 	 *			Device (PR11)
 	 *			Device (PR12)
+	 *				Device (FN12)
+	 *				Device (FN13)
 	 *			Device (PR13)
 	 *			...
-	 * So all binding process is divided into two parts. binding
-	 * root hub and usb ports.
+	 * where HUBN is root hub, and PRNN are USB ports and devices
+	 * connected to them, and FNNN are individualk functions for
+	 * connected composite USB devices. PRNN and FNNN may contain
+	 * _CRS and other methods describing sideband resources for
+	 * the connected device.
+	 *
+	 * On the kernel side both root hub and embedded USB devices are
+	 * represented as instances of usb_device structure, and ports
+	 * are represented as usb_port structures, so the whole process
+	 * is split into 2 parts: finding companions for devices and
+	 * finding companions for ports.
+	 *
+	 * Note that we do not handle individual functions of composite
+	 * devices yet, for that we would need to assign companions to
+	 * devices corresponding to USB interfaces.
 	 */
 	if (is_usb_device(dev))
 		return usb_acpi_find_companion_for_device(to_usb_device(dev));

  reply	other threads:[~2019-01-23 20:57 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-17  1:07 [PATCH 0/5] Reset Intel BT controller if it gets stuck Rajat Jain
2018-11-17  1:07 ` [PATCH 1/5] usb: split code locating ACPI companion into port and device Rajat Jain
2018-11-17  1:07   ` [1/5] " Rajat Jain
2018-11-17  1:07 ` [PATCH 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain
2018-11-17  1:07   ` [2/5] " Rajat Jain
2018-11-17  1:07 ` [PATCH 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain
2018-11-17  1:07   ` [3/5] " Rajat Jain
2018-11-17  1:07 ` [PATCH 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain
2018-11-17  1:07   ` [4/5] " Rajat Jain
2018-11-17  1:07 ` [PATCH 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain
2018-11-17  1:07   ` [5/5] " Rajat Jain
2018-11-19 23:04 ` [PATCH v2 1/5] usb: split code locating ACPI companion into port and device Rajat Jain
2018-11-19 23:04   ` [v2,1/5] " Rajat Jain
2018-11-19 23:04   ` [PATCH v2 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain
2018-11-19 23:04     ` [v2,2/5] " Rajat Jain
2018-11-19 23:04   ` [PATCH v2 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain
2018-11-19 23:04     ` [v2,3/5] " Rajat Jain
2018-11-19 23:04   ` [PATCH v2 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain
2018-11-19 23:04     ` [v2,4/5] " Rajat Jain
2018-11-19 23:04   ` [PATCH v2 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain
2018-11-19 23:04     ` [v2,5/5] " Rajat Jain
2018-11-21 23:50 ` [PATCH v3 1/5] usb: split code locating ACPI companion into port and device Rajat Jain
2018-11-21 23:50   ` [v3,1/5] " Rajat Jain
2018-11-21 23:50   ` [PATCH v3 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain
2018-11-21 23:50     ` [v3,2/5] " Rajat Jain
2018-12-05  9:32     ` [PATCH v3 2/5] " Greg Kroah-Hartman
2018-12-05  9:32       ` [v3,2/5] " Greg Kroah-Hartman
2018-12-05 17:19       ` [PATCH v3 2/5] " Ghorai, Sukumar
2018-12-05 17:19         ` [v3,2/5] " Ghorai, Sukumar
2018-11-21 23:50   ` [PATCH v3 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain
2018-11-21 23:50     ` [v3,3/5] " Rajat Jain
2018-11-21 23:50   ` [PATCH v3 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain
2018-11-21 23:50     ` [v3,4/5] " Rajat Jain
2018-11-21 23:50   ` [PATCH v3 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain
2018-11-21 23:50     ` [v3,5/5] " Rajat Jain
2018-12-20  8:46     ` [PATCH v3 5/5] " Rajat Jain
2018-12-20  8:46       ` [v3,5/5] " Rajat Jain
2019-01-18 11:04     ` [PATCH v3 5/5] " Marcel Holtmann
2019-01-18 11:04       ` [v3,5/5] " Marcel Holtmann
2019-01-18 20:51       ` [PATCH v3 5/5] " Rajat Jain
2019-01-18 20:51         ` [v3,5/5] " Rajat Jain
2018-12-05  9:32   ` [PATCH v3 1/5] usb: split code locating ACPI companion into port and device Greg Kroah-Hartman
2018-12-05  9:32     ` [v3,1/5] " Greg Kroah-Hartman
2018-12-05 17:41     ` [PATCH v3 1/5] " Ghorai, Sukumar
2018-12-05 17:41       ` [v3,1/5] " Ghorai, Sukumar
2019-01-18 22:34 ` [PATCH v4 1/5] " Rajat Jain
2019-01-18 22:34   ` [v4,1/5] " Rajat Jain
2019-01-18 22:34   ` [PATCH v4 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain
2019-01-18 22:34     ` [v4,2/5] " Rajat Jain
2019-01-19 19:51     ` [PATCH v4 2/5] " Marcel Holtmann
2019-01-19 19:51       ` [v4,2/5] " Marcel Holtmann
2019-01-22 22:29       ` [PATCH v4 2/5] " Rajat Jain
2019-01-22 22:29         ` [v4,2/5] " Rajat Jain
2019-01-18 22:34   ` [PATCH v4 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain
2019-01-18 22:34     ` [v4,3/5] " Rajat Jain
2019-01-19 19:51     ` [PATCH v4 3/5] " Marcel Holtmann
2019-01-19 19:51       ` [v4,3/5] " Marcel Holtmann
2019-01-22 22:34       ` [PATCH v4 3/5] " Rajat Jain
2019-01-22 22:34         ` [v4,3/5] " Rajat Jain
2019-01-18 22:34   ` [PATCH v4 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain
2019-01-18 22:34     ` [v4,4/5] " Rajat Jain
2019-01-19 19:51     ` [PATCH v4 4/5] " Marcel Holtmann
2019-01-19 19:51       ` [v4,4/5] " Marcel Holtmann
2019-01-22 22:35       ` [PATCH v4 4/5] " Rajat Jain
2019-01-22 22:35         ` [v4,4/5] " Rajat Jain
2019-01-18 22:34   ` [PATCH v4 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain
2019-01-18 22:34     ` [v4,5/5] " Rajat Jain
2019-01-19 19:51     ` [PATCH v4 5/5] " Marcel Holtmann
2019-01-19 19:51       ` [v4,5/5] " Marcel Holtmann
2019-01-22 22:36       ` [PATCH v4 5/5] " Rajat Jain
2019-01-22 22:36         ` [v4,5/5] " Rajat Jain
2019-01-19 19:51   ` [PATCH v4 1/5] usb: split code locating ACPI companion into port and device Marcel Holtmann
2019-01-19 19:51     ` [v4,1/5] " Marcel Holtmann
2019-01-22 22:28     ` [PATCH v4 1/5] " Rajat Jain
2019-01-22 22:28       ` [v4,1/5] " Rajat Jain
2019-01-22 22:42       ` [PATCH v4 1/5] " Dmitry Torokhov
2019-01-22 22:42         ` [v4,1/5] " Dmitry Torokhov
2019-01-23  6:36         ` [PATCH v4 1/5] " Greg Kroah-Hartman
2019-01-23  6:36           ` [v4,1/5] " Greg Kroah-Hartman
2019-01-23 20:57 ` [PATCH v5 1/4] " Rajat Jain
2019-01-23 20:57   ` [v5,1/4] " Rajat Jain
2019-01-23 20:57   ` Rajat Jain [this message]
2019-01-23 20:57     ` [v5,2/4] usb: assign ACPI companions for embedded USB devices Rajat Jain
2019-01-23 20:57   ` [PATCH v5 3/4] Bluetooth: Allow driver specific cmd timeout handling Rajat Jain
2019-01-23 20:57     ` [v5,3/4] " Rajat Jain
2019-01-24  9:36     ` [PATCH v5 3/4] " Marcel Holtmann
2019-01-24  9:36       ` [v5,3/4] " Marcel Holtmann
2019-01-24 20:10       ` [PATCH v5 3/4] " Rajat Jain
2019-01-24 20:10         ` [v5,3/4] " Rajat Jain
2019-01-23 20:57   ` [PATCH v5 4/4] Bluetooth: btusb: Use the cmd_timeout method to reset the Intel BT chip Rajat Jain
2019-01-23 20:57     ` [v5,4/4] " Rajat Jain
2019-01-24  9:46     ` [PATCH v5 4/4] " Marcel Holtmann
2019-01-24  9:46       ` [v5,4/4] " Marcel Holtmann
2019-01-24 20:05       ` [PATCH v5 4/4] " Rajat Jain
2019-01-24 20:05         ` [v5,4/4] " Rajat Jain
2019-01-24 23:28 ` [PATCH v6 1/4] usb: split code locating ACPI companion into port and device Rajat Jain
2019-01-24 23:28   ` [v6,1/4] " Rajat Jain
2019-01-24 23:28   ` [PATCH v6 2/4] usb: assign ACPI companions for embedded USB devices Rajat Jain
2019-01-24 23:28     ` [v6,2/4] " Rajat Jain
2019-01-25  7:51     ` [PATCH v6 2/4] " Marcel Holtmann
2019-01-25  7:51       ` [v6,2/4] " Marcel Holtmann
2019-01-24 23:28   ` [PATCH v6 3/4] Bluetooth: Allow driver specific cmd timeout handling Rajat Jain
2019-01-24 23:28     ` [v6,3/4] " Rajat Jain
2019-01-25  7:51     ` [PATCH v6 3/4] " Marcel Holtmann
2019-01-25  7:51       ` [v6,3/4] " Marcel Holtmann
2019-01-24 23:28   ` [PATCH v6 4/4] Bluetooth: btusb: Use the cmd_timeout method to reset the Intel BT chip Rajat Jain
2019-01-24 23:28     ` [v6,4/4] " Rajat Jain
2019-01-25  7:51     ` [PATCH v6 4/4] " Marcel Holtmann
2019-01-25  7:51       ` [v6,4/4] " Marcel Holtmann
2019-01-25  7:51   ` [PATCH v6 1/4] usb: split code locating ACPI companion into port and device Marcel Holtmann
2019-01-25  7:51     ` [v6,1/4] " Marcel Holtmann

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=20190123205725.239661-2-rajatja@google.com \
    --to=rajatja@google.com \
    --cc=alex.hung@canonical.com \
    --cc=chethan.tumkur.narayan@intel.com \
    --cc=davem@davemloft.net \
    --cc=dtor@chromium.org \
    --cc=dtor@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=marcel@holtmann.org \
    --cc=netdev@vger.kernel.org \
    --cc=raghuram.hegde@intel.com \
    --cc=rajatxjain@gmail.com \
    --cc=sukumar.ghorai@intel.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 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.